Ошибки компилятора при попытке собрать очень простое приложение gtkmm:

Я установил gtkmm 3 на Ubuntu 13.04, используя aptitude (мне нравится aptitude, потому что он запоминает, что было установлено, когда вы хотите его удалить):

sudo aptitude install libgtkmm-3.0-dev --with-recommends

Используя codelite 5.1.2 и цепочку инструментов gtk ++ по умолчанию, в моем компиляторе включены пути, которые я добавил:

/usr/include/gtkmm-3.0 - путь к gtkmm.h

Я попытался создать первый образец приложения в разделе Программирование с помощью GTKMM:

#include <gtkmm.h>
int main ( int argc, char *argv[] )
{

    Gtk::Main kit ( argc, argv );
    Gtk::Window window;
    Gtk::Main::run ( window );
    return 0;

}

После устранения нескольких ошибок типа «включаемый файл не найден» из gtkmm.h, который включает всю структуру gtkmm, мой путь включения компилятора теперь выглядит следующим образом:

/usr/include/gtkmm-3.0
/usr/include/glibmm-2.4
/usr/lib/i386-linux-gnu/glibmm-2.4/include
/usr/include/glib-2.0

И с glib.h вырывается ад:

/bin/sh -c 'make -j 4 -e -f  "Calendars_wsp.mk"'
----------Building project:[ CalendarsGUI - Debug ]----------
........

/gtkmm-3.0 -I/usr/include/glibmm-2.4 -I/usr/lib/i386-linux-gnu/glibmm-2.4/include -I//usr/include/glib-2.0
In file included from //usr/include/glib-2.0/glib/gtypes.h:36:0,
                 from //usr/include/glib-2.0/glib/galloca.h:34,
                 from //usr/include/glib-2.0/glib.h:32,
                 from /usr/include/glibmm-2.4/glibmm/thread.h:46,
                 from /usr/include/glibmm-2.4/glibmm.h:87,
                 from /usr/include/gtkmm-3.0/gtkmm.h:87,
                 from main.cpp:16:
***//usr/include/glib-2.0/glib/gversionmacros.h:179:2: error: #error "GLIB_VERSION_MIN_REQUIRED must be >= GLIB_VERSION
#include <gtkmm.h>
int main ( int argc, char *argv[] )
{

    Gtk::Main kit ( argc, argv );
    Gtk::Window window;
    Gtk::Main::run ( window );
    return 0;

}
26"*** In file included from //usr/include/glib-2.0/glib/galloca.h:34:0, from //usr/include/glib-2.0/glib.h:32, from /usr/include/glibmm-2.4/glibmm/thread.h:46, from /usr/include/glibmm-2.4/glibmm.h:87, from /usr/include/gtkmm-3.0/gtkmm.h:87, from main.cpp:16: ***//usr/include/glib-2.0/glib/gtypes.h:448:2: error: #error unknown ENDIAN type ....... make: *** [All] Error 2 2 errors, 2 warnings***

(У меня были те же проблемы при попытке использовать gtkmm 2.4)

Очевидно, я что-то здесь упускаю. Что я делаю неправильно? Что еще мне нужно сделать для создания проектов gtkmm?


person Vector    schedule 27.06.2013    source источник
comment
Это сообщение об ошибке кажется мне довольно ясным: #error GLIB_VERSION_MIN_REQUIRED должно быть ›= GLIB_VERSION_2_26, и у вас, похоже, установлена ​​только версия glib 2.0.   -  person Some programmer dude    schedule 27.06.2013
comment
Казалось бы, вы правы, но я установил 3.0 в соответствии с инструкциями на веб-сайте GTKMM, и, похоже, единственная версия glib.h - это та, что у меня есть. В документации GTKMM говорится, что установленная версия не всегда синхронизируется с фактической базой кода, которую они выпускают.   -  person Vector    schedule 27.06.2013
comment
@JoachimPileborg - кажется, я не одинок. По SE / AskUbuntu очень много подобных вопросов. Они говорят, что Unity, похоже, не очень хорошо ладит с gtkmm .... Кстати, спасибо за правку.   -  person Vector    schedule 27.06.2013


Ответы (2)


При использовании gtkmm рекомендуется использовать инструмент pkg-config. Вы также можете сделать это из codelite:

Щелкните правой кнопкой мыши свой проект: Настройки -> Общие настройки -> Компилятор -> Параметры компилятора C ++: и добавьте:

$(shell pkg-config gtkmm-3.0 --cflags)

Если у вас есть другие варианты, они должны быть разделены точкой с запятой.

Затем добавьте в параметры компоновщика следующее: Щелкните правой кнопкой мыши свой проект: Настройки -> Общие настройки -> Компоновщик -> Параметры:

$(shell pkg-config gtkmm-3.0 --libs)

опять же, если у вас есть другие варианты, они должны быть разделены точкой с запятой

Удалите все жестко закодированные пути включения, которые вы добавили, 2 выше должно быть достаточно

Примечание:

На этот точный вопрос также ответили на форуме codelite: http://forums.codelite.org/viewtopic.php?f=11&t=1396&p=6416&hilit=gtkmm#p6410

Эран

person Eran    schedule 28.06.2013
comment
Я вижу, что диалоговое окно создания нового проекта в codelite дает возможность создать проект gtkmm и автоматически добавляет эти флаги. - person Vector; 28.06.2013

Не возитесь с включениями, используйте вместо него pkg-config:

g++ foo.cc -o foo `pkg-config gtkmm-3.0 --cflags --libs`

кстати, ваш пример компилируется и работает нормально.

person barti_ddu    schedule 27.06.2013