Linux上的链接器错误:“undefined reference to”

我能够没有问题地共享一个共享库。 我创build了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在库中find。 由于某种原因,它没有被链接。 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上

谢谢。

Solutions Collecting From Web of "Linux上的链接器错误:“undefined reference to”"

将链接命令行中的对象文件放在后面:

 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文件放到最后