链接到C ++应用程序中的错误库版本

时间:2010-10-08 14:47:09

标签: c++ linux linker qmake rhel5

我正在对RHEL / CentOS 5上的C ++二进制文件进行故障排除,这对openssl共享库有问题。我没有做太多的C / C ++编程,而且我很难找到根本问题。

似乎出错的是应用程序链接到特定版本的libcrypto和libssl(0.9.8),而不是/lib/libcrypto.so.6/lib/libssl.so.6的符号链接路径。由于openssl libs在编译后已经更新,现在它已经被破坏了。

ldd显示二进制文件的以下2个问题:

libcrypto.so.0.9.8 => not found
libssl.so.0.9.8 => not found

[编辑]我获得了源代码,并且构建正确。我将不得不采用最简单的解释,构建机器配置错误的非标准库,并且makefile很好。

2 个答案:

答案 0 :(得分:0)

噢,我误解了这个问题,因为你正在自己构建一个二进制文件。


您可以使用ldd your-binary来检查它将在运行时加载哪些库。

如果故意加载不同版本,则应检查LD_LIBRARY_PATH环境和/etc/ld.so.config中的加载程序配置,以获取加载库的路径列表。或者,可以使用链接行上的-rpath开关将加载器路径硬编码到二进制文件中 - 在Makefile中查找这些。

答案 1 :(得分:0)

一些建议(我假设您无法获得链接到新版本ssl库的新二进制文件):

  1. 从以前版本的软件包中获取旧版本的libs,并将它们保存在二进制文件中(您可以将它们放在/ usr / lib之外的某处,并使用LD_LIBRARY_PATH为您的程序加载它们)

  2. 强制使用LD_PRELOAD加载新版本的libs,并希望二进制文件所需的所有符号都存在,并且实际运行二进制文件。这种工作机会很小,但值得一试。