Не компилится GTK прога в Code::Blocks
Ошибки:
obj/Debug/main.o||In function `helloWorld':|
main.c|8|undefined reference to `gtk_window_get_type'|
main.c|8|undefined reference to `g_type_check_instance_cast'|
main.c|8|undefined reference to `gtk_message_dialog_new'|
…и так далее…
Я так понимаю, что надо какие-то либы подключить. А какие и куда их прописать? Подскажите плиз. (гугл ответа не дал)
16 сентября 2009 в 18:04
спасибо, буду разбираться
16 сентября 2009 в 18:01
Никогда не имел с wxwidgets дела, но думаю, что вот так:
//wiki.wxwidgets.org/Wx-Config
16 сентября 2009 в 17:05
Василий Степанов, а подскажите плиз как компилить правильно wxWIDGETs приложение. Какие опции добавить в раздел линкера и компилятора?
16 сентября 2009 в 16:04
не за что
пробелы в знаниях нужно чем-то заполнять:
pkg-config — утилита, позволяющая выяснять флаги компиляции и линковки желаемого модуля. Эти флаги по идее должен добавлять модуль в базу pkg-config в процессе своей инсталляции. Однако не все модули это делают, что порой усложняет процесс выяснения необходимых флагов. Но GTK — эт хороший модуль.
кавычки “ означают, что тебе нужен результат комманды внутри кавычек.
у меня на машинке
pkg-config –libs gtk+-2.0 выдаёт
-L/lib64 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
pkg-config –cflags gtk+-2.0
-I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12
в процессе сборки, codeblocks должен вызвать что-то типа
g++ -c `pkg-config –cflags gtk+-2.0` helloworld.cpp -o helloworld.o
g++ helloworld.o `pkg-config –libs gtk+-2.0` -o helloworld
что по факту будет эквивалентно:
g++ -c -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 helloworld.cpp -o helloworld.o
g++ helloworld.o -L/lib64 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0-o helloworld
-c — ты ещё не готов линковаться.
-Ipath — добавить path в базу по которой ищутся заголовки. иными словами после этого будут инклюдиться файлы лежащщие в path/subpath/header.h как #include <subpath/header.h>
-o — куда писать результат
-Lpath — добапить path в базу по которой ищутся либы.
-lname — слинковать либу. сначала ищется либа с именем libname.so, потом либа с именем libname.a. (мы ведь все про линух говорим.)
helloworld.o идёт до всех либ, потому что "undefined reference" ищется в либах, определённых справа.
16 сентября 2009 в 16:03
Не эксперт по code::blocks но в случае, если работаете с g++ компилятором и имеете на борту ко всему прочему pkg-config, то самым верным было бы следующее решение:
в опции линкера добавить `pkg-config –libs gtk+-2.0 `
в опции компилятора добавить `pkg-config –cflags gtk+-2.0 `
16 сентября 2009 в 16:03
спасибо, помогло.
Дай Бог вам здоровья.
16 сентября 2009 в 16:02
Василий Степанов, простите меня за тупость, но там я так и не понял как мне настроить Code::Blocks (я в нем прогу компилю). Может вы знаете?
16 сентября 2009 в 16:01
А сайт GTK на что?
//library.gnome.org/devel/gtk-tutorial/stable/x...
The libraries that are usually linked in are… и далее по списку.