2012-07-18 7 views
14

Creo que esta no es una pregunta duplicada, he visto todas las preguntas/respuestas antes de publicar esta pregunta. Creo que tengo una situación diferente aquí.Compilando y enlazando el proyecto GTK 3 con C en Ubuntu

Uso Ubuntu 12.04 y descargué GTK 2 y 3. Copié un código fuente GTK simple del sitio web de GNOME. Pero cuando se utiliza este comando en el terminal:

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

me sale esto:

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' 

Aquí está mi código:

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

No estoy seguro de si los errores aparecerá porque tengo dos versiones de GTK + o qué. Soy extremadamente novato en el desarrollo de aplicaciones en Ubuntu/Linux.

+4

Compilar como 'gcc hello.c $ (PKG-config --cflags --libs gtk + -3.0) -O hello' es decir, de origen antes de libs –

+0

Oh, Dios mío, funcionó. Muchas gracias. Podría poner su respuesta a continuación para marcarla como la respuesta. – Anwar

Respuesta

22

Usted debe compilar con el archivo de origen que aparece antes de que las bibliotecas como gcc hello.c $(pkg-config --cflags --libs gtk+-3.0) -o hello, la razón es el comportamiento de enlazador es decir que no vincula las bibliotecas a no ser que se ven los símbolos de la biblioteca antes de la compilación.
Espero que esto ayude!

+0

+1, ¡exactamente! Comportamiento bastante extraño y nervioso de versiones más nuevas de GCC/binutils. –

+4

@ H2CO3: ¡Sí señor (/ señora)! Y es una pregunta bastante popular en SO también :) –

-1

También podría incluir la librería GTK directamente en su proyecto:

  1. En Eclipse expanda: Proyecto> Propiedades> C/C++ Crecimiento> Configuración> Configuración de Herramientas> Cruz GCC Linker> Bibliotecas
  2. Set: Ruta de búsqueda de la biblioteca (-L) a la ruta al archivo "libgtk-n.so", con n como su versión. Después de instalar (apt-get install libgtk-3-dev) en Lubuntu, este fue "/ usr/lib/x86_64-linux-gnu /" para mí.
  3. A continuación, añadir a las bibliotecas (-l): gtk-n
Cuestiones relacionadas