gpt4 book ai didi

linux - Linux : "undefined reference to" 上的链接器错误

转载 作者:IT老高 更新时间:2023-10-28 11:19:50 27 4
gpt4 key购买 nike

我可以毫无问题地创建一个共享库。我创建了 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

如果你不这样做,链接器可能会在它扫描库的链接阶段决定它不需要来自特定库的任何内容,然后它不会在以后找到一些未定义的库后重新扫描库目标文件中的符号。如果你把目标文件放在第一位,你就不会遇到这个问题。

关于linux - Linux : "undefined reference to" 上的链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com