![更改给定可执行文件的链接库 (CentOs 6)](https://linux22.com/image/19068/%E6%9B%B4%E6%94%B9%E7%BB%99%E5%AE%9A%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E7%9A%84%E9%93%BE%E6%8E%A5%E5%BA%93%20(CentOs%206).png)
我有一个像这样链接的可执行文件:
$ ldd a.out
libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000)
librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000)
.
.
其中 libcrypto 和 libssl 库是 openssl 1.0.0-fips 库。我想尝试使用 1.0.1 库,因此我在主目录中构建了它们。有没有办法a.out
轻松重新链接到我的新 openssl 库?我想避免
- 必须重新链接
a.out
(因为构建工具非常复杂) - 更改任何全局设置(因为其他开发人员在这台机器上工作)
可以在这里做我希望的事情吗?
答案1
您可以临时用不同的库替换此特定执行。在 Linux 中,环境变量 LD_LIBRARY_PATH 是一组以冒号分隔的目录,应在标准目录集之前首先搜索库;当调试新库或将非标准库用于特殊目的时,这非常有用。环境变量 LD_PRELOAD 列出了具有覆盖标准集的函数的共享库,就像 /etc/ld.so.preload 一样。 -共享库
您还可以直接调用加载器:
/lib/ld-linux.so.2 --库路径
path
executable