如何编译一个 helloworld GLib 程序?

Mar*_*ger 4 glib

我无法在 ubuntu 11.10 下编译该代码,而它在 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;
}
Run Code Online (Sandbox Code Playgroud)

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

hello_glib.c:(.text+0x24): 未定义引用 g_list_append
hello_glib.c:(.text+0x34): 未定义引用 g_list_first
collect2: ld 返回 1 个退出状态

我已经安装了 libglib2.0-dev,为什么会出现错误?

Sav*_*vic 6

试试这个,我认为库必须在“hello_glib.c”之后:

gcc -Wall -o hello_glib hello_glib.c $(pkg-config --cflags --libs glib-2.0)
./hello_glib
Run Code Online (Sandbox Code Playgroud)

不要问我为什么,我不知道,但是这个命令似乎是必需的,它在最近的(不相关的)补丁中使用:http : //bazaar.launchpad.net/~ubuntu-branches/ubuntu/oneiric /getstream/oneiric/revision/7#debian/patches/as-needed.dpatch

您还遇到了另一个错误:

test.c:在函数“main”中:test.c:6:6:警告:格式“%s”需要“char *”类型的参数,但参数 2 的类型为“gpointer”[-Wformat]

我不是 C 专家,但我认为您应该将列表数据转换为字符串:

#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;
}
Run Code Online (Sandbox Code Playgroud)

节日快乐。:)