Компиляция и связывание GTK 3 с проектом C на Ubuntu
Я считаю, что это не дублирующий вопрос, я видел все вопросы/ответы, прежде чем ставить этот вопрос. Я думаю, что у меня другая ситуация.
Я использую Ubuntu 12.04 и загружаю GTK 2 и 3. Я скопировал простой исходный код GTK с сайта GNOME. Но когда я использую эту команду в терминале:
gcc `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello
Я получаю это:
hello.c:(.text+0x17): undefined reference to `gtk_init'
hello.c:(.text+0x23): undefined reference to `gtk_window_new'
hello.c:(.text+0x47): undefined reference to `gtk_main_quit'
hello.c:(.text+0x5b): undefined reference to `g_signal_connect_data'
hello.c:(.text+0x67): undefined reference to `gtk_widget_show'
hello.c:(.text+0x6c): undefined reference to `gtk_main'
вот мой код:
#include <gtk/gtk.h>
int
main (int argc,
char *argv[])
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show (window);
gtk_main ();
return 0;
}
Я не уверен, что появляются ошибки, потому что у меня две версии GTK + или что.
Я очень новичок в разработке приложений в Ubuntu/Linux.
Ответы
Ответ 1
Вы должны скомпилировать исходный файл перед библиотеками как gcc hello.c $(pkg-config --cflags --libs gtk+-3.0) -o hello
, причиной является поведение компоновщика, то есть оно не связывает библиотеки, если символы этой библиотеки не видны ранее в компиляции.
Надеюсь, это поможет!
Ответ 2
Вы также можете включить библиотеку gtk непосредственно в свой проект:
- В Eclipse expand: Project > Properties > C/С++ Build > Настройки > Настройки инструментa > Cross GCC Linker > Библиотеки
- Установить: путь поиска библиотеки (-L) к пути к файлу "libgtk-n.so", с n в качестве вашей версии. После установки (apt-get install libgtk-3-dev) на Lubuntu это было "/usr/lib/x86_64-linux-gnu/" для меня.
- Затем добавьте в Библиотеки (-l): gtk-n