2013-06-27 3 views
1

Я установил gtkmm 3 на Ubuntu 13.04 с помощью способностей (я, например, потому что он помнит, что был установлен, когда вы хотите, чтобы удалить его):компилятора Ошибки при попытке построить очень простой gtkmm приложение:

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_2_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?

+0

Это сообщение об ошибке кажется довольно ясным, мне: #error "GLIB_VERSION_MIN_REQUIRED должен быть> = GLIB_VERSION_2_26", и у вас, похоже, установлена ​​только версия 2.0 glib. –

+0

Казалось бы, вы правы, но я установил 3.0 на основе инструкций на веб-сайте GTKMM, и единственная версия glib.h, похоже, такова, что у меня есть. В документах GTKMM говорится, что установленная версия не всегда синхронизируется с фактической базой кода, которую они выпускают. – Vector

+0

@JoachimPileborg - кажется, что я не одинок. В SE/AskUbuntu есть много подобных вопросов. Они говорят, что Unity, похоже, так хорошо ладит с gtkmm .... BTW, спасибо за редактирование. – Vector

ответ

4

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

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

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

Если у вас есть еще варианты , они должны быть полупрозрачными двоеточиями

Далее, добавьте следующие строки в опции линкера: правой кнопкой мыши на вашем проекте: Настройки -> Общие настройки -> Linker -> параметры:

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

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

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

Примечание:

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

Эран

+0

Я вижу, что создание нового диалогового окна проекта в коделите дает возможность создать проект gtkmm и автоматически добавлять эти флаги. – Vector

3

Не возиться с включает в себя, используйте PKG-конфигурации вместо:

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

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