0

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。也许有一个工具可以让我更改可执行文件的共享库的位置?

4

1 回答 1

1

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

export LD_LIBRARY_PATH=/home/matt/mylib
#now try ldd bin/testCBNodeFull
于 2013-11-04T16:58:39.727 回答