Компиляция и связывание 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