Problema con bibliotecas vinculadas y GTK +

Al intentar compilar con Code :: Blocks, el ejemplo que aparece con GTK +:

#include stdlib.h #include gtk / gtk.h static void helloWorld (GtkWidget * wid, GtkWidget * win) {GtkWidget * dialog = NULL; dialog = gtk_message_dialog_new (GTK_WINDOW (win), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, "¡Hola mundo!"); gtk_window_set_position (GTK_WINDOW (diálogo), GTK_WIN_POS_CENTER); gtk_dialog_run (GTK_DIALOG (diálogo)); gtk_widget_destroy (diálogo); } int main (int argc, char * argv []) {GtkWidget * button = NULL; GtkWidget * win = NULL; GtkWidget * vbox = NULL; / * Inicializar GTK + * / g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL); gtk_init (& argc, & argv); g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL); / * Crea la ventana principal * / win = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (win), 8); gtk_window_set_title (GTK_WINDOW (win), "Hola mundo"); gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER); gtk_widget_realize (ganar); g_signal_connect (ganar, "destruir", gtk_main_quit, NULL); / * Crea un cuadro vertical con botones * / vbox = gtk_vbox_new (TRUE, 6); gtk_container_add (GTK_CONTAINER (win), vbox); button = gtk_button_new_from_stock (GTK_STOCK_DIALOG_INFO); g_signal_connect (G_OBJECT (botón), "hecho clic", G_CALLBACK (holaMundo), (gpointer) ganar); gtk_box_pack_start (GTK_BOX (vbox), botón, VERDADERO, VERDADERO, 0); button = gtk_button_new_from_stock (GTK_STOCK_CLOSE); g_signal_connect (botón, "hecho clic", gtk_main_quit, NULL); gtk_box_pack_start (GTK_BOX (vbox), botón, VERDADERO, VERDADERO, 0); / * Ingrese al bucle principal * / gtk_widget_show_all (win); gtk_main (); return 0; }

Recibo los siguientes errores:

ld.exe || no se puede encontrar -lgobject-2.0 | ld.exe || no se puede encontrar -lglib-2.0 | || === Compilación finalizada: 2 errores, 0 advertencias === |

He vinculado ambos al proyecto, pero no puedo encontrar la manera de hacerlo funcionar. He probado los paquetes empaquetados y separados de http://www.gtk.org/download-windows.html. Estoy bastante seguro de que debe ser algo simple / estúpido, pero no pude encontrar nada que pudiera ayudarme a resolver este problema.

preguntado el 12 de febrero de 11 a las 23:02

¿Cómo estás construyendo tu código? ¿Cuál es el comando que estás usando? -

Incluso si ya lo he resuelto de alguna manera, ¿dónde puedo encontrar el comando de compilación completo en Code :: Blocks? -

se puede utilizar make file para compilar su proyecto? -

2 Respuestas

¿Ha agregado el directorio GTK que contiene los archivos libglib-2.0.a, libgobject-2.0.a a los directorios de búsqueda del vinculador?
Esto se puede hacer desde la siguiente ruta:
Settings | Compiler and debugger... | Search directories | Linker | Add.

La línea de comandos completa para el compilador / enlazador se puede ver en el Build Log ventana. Para habilitar esto, vaya a:
Settings | Compiler and debugger... | Other Settings | Compiler logging | Full command line

No encontré el problema del punto de entrada faltante, así que tal vez su copia de GTK esté dañada. Descargue el paquete todo en uno de GTK + 2.22

asegúrese de agregar todos los directorios incluidos en Search directories | Compiler

Como nota al margen, es posible que deba compilar su proyecto usando -mms-bitfields que se puede agregar en: Settings | Compiler and debugger... | Other options simplemente pegue la bandera como está.

Respondido 13 Feb 11, 05:02

Eso parece haber funcionado. Pero no entiendo por qué necesito poner el directorio cuando incluyo la ruta completa a la biblioteca en el enlazador mismo. Además, tengo un nuevo problema al ejecutar el ejecutable terminado y no estoy seguro si está relacionado con esto. "No se puede encontrar el punto de entrada del procedimiento g_bsearch_array_destroy en la dll libglib-2.0.0". Gracias por la ayuda editar: olvidé mencionar que incluí todos los dll necesarios. - Filgera

Intenté vincular a los .libs desde el equivocado, y usé el dll incluido sin suerte. Gracias por la ayuda. Intentaré encontrar una manera. - Filgera

Cuando code :: blocks ejecuta ld.exe en lugar de llamarlo con, por ejemplo: -l glib-2.0 lo está llamando con -lglib-2.0

Agregar un espacio antes del nombre de la biblioteca en las opciones del enlazador de code :: block debería solucionarlo.

Respondido 13 Feb 11, 03:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.