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。也许有一个工具可以让我改变可执行文件共享库的位置?
答案 0 :(得分:1)
共享库在运行时加载,而不是编译时。因此,您需要告诉valgrind您希望它在运行时使用哪个OpenSSL库。您可以通过将LD_LIBRARY_PATH环境变量设置为包含重建对象的目录来执行此操作。
export LD_LIBRARY_PATH=/home/matt/mylib
#now try ldd bin/testCBNodeFull