2012-02-21 63 views
0

我有一個包含文件blah.c:麻煩鏈接到的GObject內省庫

#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中。

是什麼導致這種鏈接錯誤?

回答

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 

希望這有助於!

+0

這完美的作品!謝謝!我沒有必要的聲望來提高你的答案,但如果可以的話,我會。 – 2012-02-21 03:53:49

+1

@MichaelSiler:很高興幫助!這個問題已經有好幾次了。那麼你已經接受了答案我想這已經足夠了,更重要的是它解決了你的問題:) – 2012-02-21 04:02:06