Can';t链接到特定的OpenSSL库(Linux Mint 13)

Can';t链接到特定的OpenSSL库(Linux Mint 13),linux,gcc,linker,openssl,Linux,Gcc,Linker,Openssl,OpenSSL不能很好地与valgrind一起工作,除非您使用特定的选项构建它,所以我再次构建了OpenSSL,以便可以轻松地调试程序。问题是,每次我构建程序时,它都链接到我不想要的OpenSSL库。我的makefile打印了很多,但最重要的两行是: cc /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/local/ssl/lib/libssl.so.1.0.0 -L/opt/local/lib -shared -o bin/libcbitcoin-cr

OpenSSL不能很好地与valgrind一起工作,除非您使用特定的选项构建它,所以我再次构建了OpenSSL,以便可以轻松地调试程序。问题是,每次我构建程序时,它都链接到我不想要的OpenSSL库。我的makefile打印了很多,但最重要的两行是:

cc /usr/local/ssl/lib/libcrypto.so.1.0.0 /usr/local/ssl/lib/libssl.so.1.0.0 -L/opt/local/lib  -shared  -o bin/libcbitcoin-crypto.2.0.so build/CBOpenSSLCrypto.o
cc build/testCBNodeFull.o -L/home/matt/Desktop/cbitcoin/bin -lcbitcoin.2.0 -lcbitcoin-network.2.0 -lcbitcoin-storage.2.0 -lcbitcoin-threads.2.0 -lcbitcoin-logging.2.0 -lcbitcoin-crypto.2.0 -lcbitcoin.2.0 -lcbitcoin-file-ec.2.0 -lcbitcoin-rand.2.0 -L/opt/local/lib -lpthread -levent_core -levent_pthreads /usr/local/ssl/lib/libcrypto.so.1.0.0 -o bin/testCBNodeFull
正如其他地方所建议的,我正在指定我想要的OpenSSL库的精确位置。然而,
ldd-bin/testCBNodeFull
给了我以下信息:

libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
我想链接到的库显然没有问题:

$ file bin/testCBNodeFull
bin/testCBNodeFull: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xd9472ecc11e12dc66d165c807a5dbe31fd461cf2, not stripped
$ file /usr/local/ssl/lib/libcrypto.so.1.0.0
/usr/local/ssl/lib/libcrypto.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0xb75602dc478ae55576e21aac5251b915b1653e73, not stripped

正如您所看到的,两者都编译为x86-64。也许有一个工具允许我更改可执行文件的共享库的位置?

共享库是在运行时加载的,而不是在编译时加载的。所以,您需要告诉valgrind您希望它在运行时使用哪个OpenSSL库。可以通过将LD_LIBRARY_PATH环境变量设置为包含重建对象的目录来完成此操作

export LD_LIBRARY_PATH=/home/matt/mylib
#now try ldd bin/testCBNodeFull

谢谢,这很有效。。。除了OpenSSL仍然给出valgrind错误,尽管我使用了-DPURIFY-(