2014-08-28 22 views
0

當我鏈接.o文件,有些問題發生的象徵:「未定義的引用」連LIB具有的功能

gcc -L/usr/local/apr/lib -lapr-1 -pthread -laprutil-1 devpkg.o bstrlib.o db.o shell.o commands.o -o devpkg 
devpkg.o: In function `main': 
/root/workspace/devpkg/devpkg.c:21: undefined reference to `apr_pool_initialize' 
/root/workspace/devpkg/devpkg.c:22: undefined reference to `apr_pool_create_ex' 
/root/workspace/devpkg/devpkg.c:36: undefined reference to `apr_getopt_init' 
/root/workspace/devpkg/devpkg.c:38: undefined reference to `apr_getopt' 

我用「objdump的-T」來檢查的lib,它返回:

objdump -T libapr-1.so|grep apr_pool_initialize 
000000000001db00 g DF .text 00000000000000fb Base  apr_pool_initialize 

爲什麼會發生這種情況?

+0

如果將'-l'規則放在命令的末尾,會怎樣? – 2014-08-28 07:33:33

+0

'undefined reference'指示編譯錯誤,而不是連接錯誤。你應該''包含'lib的頭文件(位於文件devpkg.c的頂部)。 – 2014-08-28 07:34:23

+0

@barakmanos:不,除非我非常困惑,「未定義的參考」絕對是一個鏈接器錯誤。 (但對我來說,最好是在第一杯咖啡之前明確地表示傾向性) – 2014-08-28 07:46:29

回答

1

這很可能只是一個簡單的依賴性問題。您可能想嘗試列出.o文件之後鏈接到的所有庫,並根據它們之間的依賴關係以正確的順序列出。