Como compilar um programa GLIB helloworld?

4

Eu não posso compilar esse código no Ubuntu 11.10 enquanto ele compila normalmente no Ubuntu 10.04:

#include <stdio.h>
#include <glib.h>
int main(int argc, char** argv) {
     GList* list = NULL;
     list = g_list_append(list, "Hello world!");
     printf("The first item is '%s'\n", g_list_first(list)->data);
     return 0;
}

$ gcc $ (pkg-config --cflags --libs glib-2.0) hello_glib.c

hello_glib.c :(. text + 0x24): referência indefinida para g_list_append
hello_glib.c :(. text + 0x34): referência indefinida para g_list_first
collect2: ld retornou 1 status de saída

Eu tenho o libglib2.0-dev instalado, por que o erro então?

    
por Marwan 25.12.2011 / 11:11

1 resposta

5

Tente isso, acho que as bibliotecas precisam ir atrás de "hello_glib.c":

gcc -Wall -o hello_glib hello_glib.c $(pkg-config --cflags --libs glib-2.0)
./hello_glib

Não me pergunte por que, eu não sei, mas a ordem parece ser necessária, foi usada em um patch recente (não relacionado): link

Você também teve outro erro:

  

test.c: Na função "main": test.c: 6: 6: warning: o formato "% s" espera   argumento do tipo 'char *', mas o argumento 2 tem tipo 'gpointer'   [-Wformat]

Não sou especialista em C, mas acho que você deve converter os dados da lista em uma string de caracteres:

#include <stdio.h>
#include <glib.h>
int main(int argc, char** argv) {
     GList* list = NULL;
     list = g_list_append(list, "Hello world!");
     char* str = g_list_first(list)->data;
     printf("The first item is '%s'\n", str);
     return 0;
}

Boas festas. :)

    
por Savvas Radevic 25.12.2011 / 12:07

Tags