1
我想在我的C程序中使用名爲iniparser
的外部庫。我使用的是gcc 4.4。鏈接器錯誤:未定義對共享對象的引用
我將iniparser
庫放在一個名爲lib/
的子目錄中,頭文件位於lib/iniparser/src中,並且庫編譯爲lib/iniparser/libiniparser.so.0
。
我寫了一個短的Makefile編譯它,這裏的make
輸出:
gcc -Wall -Wextra -Werror -c -I include/ src/smag_main.c -L lib/iniparser -liniparser -I lib/iniparser/src
gcc -Wall -Wextra -Werror -c -I include/ -L lib/iniparser -liniparser -I lib/iniparser/src src/agros.c
gcc -Wall -Wextra -Werror -c -I include/ -L lib/iniparser -liniparser -I lib/iniparser/src src/main.c
gcc -Wall -Wextra -Werror -L lib/iniparser -liniparser -o agros smag_main.o main.o agros.o
smag_main.o: In function `sec_haskey':
smag_main.c:(.text+0xa9): undefined reference to `iniparser_find_entry'
smag_main.o: In function `parse_config':
smag_main.c:(.text+0x153): undefined reference to `iniparser_load'
smag_main.c:(.text+0x18b): undefined reference to `iniparser_getint'
smag_main.c:(.text+0x1c6): undefined reference to `iniparser_getstring'
smag_main.c:(.text+0x202): undefined reference to `iniparser_getstring'
smag_main.c:(.text+0x261): undefined reference to `iniparser_getstring'
smag_main.c:(.text+0x2c2): undefined reference to `iniparser_getint'
smag_main.c:(.text+0x2d5): undefined reference to `iniparser_freedict'
collect2: ld returned 1 exit status
make: *** [agros] Error 1
海灣合作委員會第一次調用編譯smag_main.o
成功,第二個編譯agros.o
,第三個main.o
。第4次調用是鏈接器,它將所有這些對象鏈接到可執行文件agros
。它顯然失敗了。
它看起來像在連接時定位iniparser.so
時出現問題。我的電話怎麼了?
我很困惑。
(替代的問題,如果任何人都可以通過直接調用ld
來解釋如何鏈接它將是很好的)。
它的工作,謝謝。這是標準行爲嗎?這是爲什麼? – rahmu
當您提供命令-liniparser時,鏈接器正在查找具有特定名稱的庫。基本上libiniparser.a(用於靜態庫)或libiniparser.so(用於共享庫)。有理由有一個名爲libiniparser.so.0的文件有關更多詳細信息,請參閱此處:http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html – codehippo