2012-07-18 9 views
14

Wierzę, że to nie jest duplikat pytania, widziałem wszystkie pytania/odpowiedzi, zanim opublikuję to pytanie. Myślę, że mam tutaj inną sytuację.Kompilowanie i łączenie GTK 3 z projektem C na Ubuntu

Używam Ubuntu 12.04 i pobieram GTK 2 i 3. Skopiowałem prosty kod źródłowy GTK ze strony internetowej GNOME. Ale kiedy używać tej komendy w terminalu:

gcc `pkg-config --cflags --libs gtk+-3.0` hello.c -o hello 

uzyskać to:

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' 

tutaj jest mój kod:

#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; 
} 

Nie jestem pewien, czy pojawiają się błędy, bo mam dwie wersje GTK + lub co. Jestem niezwykle początkującym programistą w zakresie programowania aplikacji w systemie Ubuntu/Linux.

+4

kompilacji jako 'gcc hello.c $ (pkg-config --cflags --libs GTK + -3,0) -o hello' czyli źródło przed bibliotekami –

+0

O mój boże, zadziałało. Dziękuję bardzo. Czy mógłbyś podać swoją odpowiedź poniżej, aby oznaczyć ją jako odpowiedź. – Anwar

Odpowiedz

22

Powinieneś skompilować z plikiem źródłowym pojawiającym się przed bibliotekami jako gcc hello.c $(pkg-config --cflags --libs gtk+-3.0) -o hello, powodem jest zachowanie linkera, tj. Nie łączy bibliotek, chyba że symbole tej biblioteki są widoczne przed kompilacją.
Mam nadzieję, że to pomoże!

+0

+1, dokładnie! Dość dziwne i nerwowe zachowanie nowszych wersji GCC/binutils. –

+4

@ H2CO3: Tak, proszę pana (tak jest)! I jest to dość popularne pytanie również na SO :) –

-1

Można także biblioteki gtk bezpośrednio do projektu:

  1. W Eclipse rozwinąć: Projekt> Właściwości> C/C++ budowlanej> Ustawienia> Ustawienia narzędzi> Krzyż GCC Linker> Biblioteki
  2. Set: Ścieżka wyszukiwania biblioteki (-L) do ścieżki do pliku "libgtk-n.so", gdzie n jest twoją wersją. Po zainstalowaniu (apt-get install libgtk-3-dev) na Lubuntu było to "/ usr/lib/x86_64-linux-gnu /" dla mnie.
  3. Następnie dodać do biblioteki (-l): gtk-n