我正在对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很好。
答案 0 :(得分:0)
噢,我误解了这个问题,因为你正在自己构建一个二进制文件。
您可以使用ldd your-binary
来检查它将在运行时加载哪些库。
如果故意加载不同版本,则应检查LD_LIBRARY_PATH
环境和/etc/ld.so.config
中的加载程序配置,以获取加载库的路径列表。或者,可以使用链接行上的-rpath
开关将加载器路径硬编码到二进制文件中 - 在Makefile中查找这些。
答案 1 :(得分:0)
一些建议(我假设您无法获得链接到新版本ssl库的新二进制文件):
从以前版本的软件包中获取旧版本的libs,并将它们保存在二进制文件中(您可以将它们放在/ usr / lib之外的某处,并使用LD_LIBRARY_PATH为您的程序加载它们)
强制使用LD_PRELOAD加载新版本的libs,并希望二进制文件所需的所有符号都存在,并且实际运行二进制文件。这种工作机会很小,但值得一试。