singlepost

Не компилится GTK прога в Code::Blocks << На главную или назад  

Не компилится 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'|

...и так далее...

Я так понимаю, что надо какие-то либы подключить. А какие и куда их прописать? Подскажите плиз. (гугл ответа не дал)

8 ответов в теме “Не компилится GTK прога в Code::Blocks”

  1. 1
    Василий Степанов ответил:

    А сайт GTK на что?
    http://library.gnome.org/devel/gtk-tutorial/stable/x...

    The libraries that are usually linked in are… и далее по списку.

  2. 2
    Александр Васюченко ответил:

    Василий Степанов, простите меня за тупость, но там я так и не понял как мне настроить Code::Blocks (я в нем прогу компилю). Может вы знаете?

  3. 3
    Василий Степанов ответил:

    Не эксперт по code::blocks :) но в случае, если работаете с g++ компилятором и имеете на борту ко всему прочему pkg-config, то самым верным было бы следующее решение:
    в опции линкера добавить `pkg-config –libs gtk+-2.0 `
    в опции компилятора добавить `pkg-config –cflags gtk+-2.0 `

  4. 4
    Александр Васюченко ответил:

    спасибо, помогло.
    Дай Бог вам здоровья.

  5. 5
    Василий Степанов ответил:

    не за что ;)

    пробелы в знаниях нужно чем-то заполнять:

    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" ищется в либах, определённых справа.

  6. 6
    Александр Васюченко ответил:

    Василий Степанов, а подскажите плиз как компилить правильно wxWIDGETs приложение. Какие опции добавить в раздел линкера и компилятора?

  7. 7
    Василий Степанов ответил:

    Никогда не имел с wxwidgets дела, но думаю, что вот так:
    http://wiki.wxwidgets.org/Wx-Config

  8. 8
    Александр Васюченко ответил:

    спасибо, буду разбираться

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.