簡體   English   中英

Linux上的鏈接器錯誤:“未定義引用”

[英]Linker error on Linux: “undefined reference to”

我可以毫無問題地創建一個共享庫。 我創建了libcbitcoin.so(沒有錯誤),並嘗試通過可執行文件以及OpenSSL庫與之鏈接。 我使用以下命令:

gcc -L/media/sf_BitEagle_Projects/cbitcoin/build/bin -lcbitcoin \
-Wl-rpath,/media/sf_BitEagle_Projects/cbitcoin/build/bin -lssl -lcrypto \
-L/usr/local/ssl/lib/ -o /media/sf_BitEagle_Projects/cbitcoin/build/bin/testCBAddress \
/media/sf_BitEagle_Projects/cbitcoin/build/obj/testCBAddress.o \
/media/sf_BitEagle_Projects/cbitcoin/build/obj/CBOpenSSLCrypto.o

bin目錄是庫的位置。 obj目錄包含我希望鏈接到可執行文件的目標文件。 在命令中,我使用-L,-l和-rpath選項,我認為這是在Linux中進行鏈接所需的全部。 由於出現類似以下的錯誤,看來我錯了:

/media/sf_BitEagle_Projects/cbitcoin/test/testCBAddress.c:40:
undefined reference to `CBNewByteArrayFromString'

在庫中找到CBNewByteArrayFromString。 由於某種原因,它沒有被鏈接。 也是OpenSSL的:

/media/sf_BitEagle_Projects/cbitcoin/dependencies/crypto/CBOpenSSLCrypto.c:37:
undefined reference to `SHA1'

如何獲得鏈接才能正常工作?

GCC版本:gcc(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3

在Linux Mint 13上

謝謝。

將庫放在鏈接命令行上的目標文件之后:

gcc /media/sf_BitEagle_Projects/cbitcoin/build/obj/testCBAddress.o \
    /media/sf_BitEagle_Projects/cbitcoin/build/obj/CBOpenSSLCrypto.o \
    -L/media/sf_BitEagle_Projects/cbitcoin/build/bin \
    -lcbitcoin -Wl-rpath,/media/sf_BitEagle_Projects/cbitcoin/build/bin \
    -L/usr/local/ssl/lib/ -lssl -lcrypto \
    -o /media/sf_BitEagle_Projects/cbitcoin/build/bin/testCBAddress

如果您不這樣做,則鏈接器可能會在掃描庫的鏈接階段決定它不需要來自特定庫的東西,然后在找到鏈接中的一些未定義符號后,它將不再重新掃描該庫。目標文件。 如果將對象文件放在第一位,則不會遇到此問題。

我認為是由於找不到符號引起的,gcc首先會從左邊穿過,嘗試將lib文件放在末尾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM