web-dev-qa-db-fra.com

Comment compiler un programme helloworld GLib?

Je ne peux pas compiler ce code sous Ubuntu 11.10 alors qu'il compile normalement sous 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): référence non définie à g_list_append
hello_glib.c :(. text + 0x34): référence non définie à g_list_first
collect2: ld a renvoyé 1 état de sortie

J'ai libglib2.0-dev installé, pourquoi l'erreur alors?

4
Marwan Tanager

Essayez ceci, je pense que les bibliothèques doivent aller après "hello_glib.c":

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

Ne me demandez pas pourquoi, je ne sais pas, mais la commande semble être nécessaire, elle a été utilisée dans un correctif récent (non associé): http://Bazaar.launchpad.net/~ubuntu-branches /ubuntu/oneiric/getstream/oneiric/revision/7#debian/patches/as-needed.dpatch

Vous avez également eu une autre erreur:

test.c: dans la fonction 'main': test.c: 6: 6: avertissement: le format '% s' attend un argument de type 'char *', mais l'argument 2 a le type 'gpointer' [-Wformat]

Je ne suis pas un expert en C, mais je pense que vous devriez convertir les données de la liste en chaîne de caractères:

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

Joyeuses fêtes. :)

5
Savvas Radevic