linux - 无法链接到特定的 OpenSSL 库 (Linux Mint 13)

标签 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-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

关于linux - 无法链接到特定的 OpenSSL 库 (Linux Mint 13),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772732/

相关文章:

c++ - 未解析的外部符号,带有使用另一个静态库的静态库

c++ - 尽管文件存在,但已编译的 C++ 程序在另一个系统上引发 "cannot open shared object file"

windows - 用于跨平台并行端口接口(interface)的简单高效的语言

linux - 如何验证两个字符串是否是使用ssh-keygen生成的 key 对?

无法设置堆栈边界gcc

c - gcc 编译与链接器 - 差异

linux - 如何静态链接使用./configure的Linux软件?

c++ - Visual Studio 的对象文件

php - ZendDebugger 无法在 Mint 12 中打开 libssl.so.0.9.8

linux - 配备内核3.2.0-29的Ubuntu 12.04有cgroup支持吗?