0

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

似乎出了问题的是应用程序正在链接到特定版本的 libcrypto 和 libssl (0.9.8),而不是和的符号链接/lib/libcrypto.so.6路径/lib/libssl.so.6。由于 openssl 库在编译后已更新,因此现在已损坏。

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

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

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

4

2 回答 2

0

D'oh,我将这个问题误读为对您自己构建的二进制文件进行故障排除。


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

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

于 2010-10-08T14:51:09.473 回答
0

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

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

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

于 2010-10-08T15:47:58.813 回答