无法链接到gobject-introspection库

时间:2012-02-21 00:57:09

标签: c gcc linker

我有文件blah.c包含:

#include <gobject-introspection-1.0/girepository.h>

int main(int argc,char **argv) {
    GIRepository *gir = g_irepository_get_default();
    return 0;
}

当然,这比我希望编译的文件简单,但是有同样的问题。我用

编译
gcc `pkg-config --cflags --libs gobject-introspection-1.0` blah.c

并获取链接错误:

/tmp/cck88oj4.o: In function `main':
blah.c:(.text+0x10): undefined reference to `g_irepository_get_default'
collect2: ld returned 1 exit status

pkg-config命令返回

-pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/gobject-introspection-1.0  -Wl,--export-dynamic -pthread -lgirepository-1.0 -lgobject-2.0 -lgmodule-2.0 -lffi -lgthread-2.0 -lrt -lglib-2.0

文件libgirepository-1.0.a和libgirepository-1.0.so都存在于/ usr / lib中。

导致此链接错误的原因是什么?

1 个答案:

答案 0 :(得分:2)

链接错误的原因可能是因为默认情况下链接器与-Wl, as-needed选项链接。使用此选项时,只有在遇到库中的符号时才会链接库。在您当前的情况下,最后添加源文件,不会遇到库中的符号,因此不会进行链接。你可以尝试:

gcc blah.c `pkg-config --cflags --libs gobject-introspection-1.0` 

gcc -Wl,-no-as-needed `pkg-config --cflags --libs gobject-introspection-1.0` blah.c

希望这有帮助!