我的編譯環境是的CentOS 5。我有一個名爲libcunit的第三方庫。我使用自動工具安裝它,它會生成libcunit.a
和libcunit.so
。我有我自己的應用程序,鏈接到一堆共享庫。 libcunit.a
在當前目錄中,libcunit.so
和其他共享庫在/usr/local/lib/
。當我編譯這樣的:GCC靜態庫鏈接VS動態鏈接
gcc -o test test.c -L. libcunit.a -L/usr/local/lib -labc -lyz
我得到一個鏈接錯誤:
libcunit.a(Util.o): In function `CU_trim_left':
Util.c:(.text+0x346): undefined reference to `__ctype_b'
libcunit.a(Util.o): In function `CU_trim_right':
Util.c:(.text+0x3fd): undefined reference to `__ctype_b'
但是,當我與.so
編譯,如:
gcc -o test test.c -L/usr/local/lib -lcunit -labc -lyz
它編譯罰款和運行正常了。
爲什麼與libcunit.a
靜態連接時,它給錯誤?
這個答案是不正確的問題有*不*做與庫順序。 –
@僱傭俄羅斯:你在哪裏看到我的答案是解決_「圖書館訂購」_的問題?建議的命令行只是OP命令行的一個複製粘貼,帶有一些編輯/添加的標誌,但沒有改變鏈接順序。 –
如果直接列出libcunit.a,則不需要'-Wl,-Bstatic'(如同OP一樣)。 –