共享库链接时间引用重定位错误

共享库链接时间引用重定位错误

我在 ARM 机器上使用基于 Ångström 的自定义 Linux 发行版。由于我在包管理器中找到的所有包都已经过时了,所以我重建了所有我能找到的软件;除少数例外,所有软件现在都是最新版本。一般来说,一切运行良好,但我在更新已安装的软件时遇到了一些问题。

例如,我以前使用 OpenSSL 1.0.2l,最近构建并安装了 OpenSSL 1.0.2n。构建和安装过程进展顺利,但令我沮丧的是,一些使用 OpenSSL 共享库的应用程序停止工作。我注意到的包括curl 和php。以下是受影响的应用程序的示例:

$ curl
curl: try 'curl --help' for more information
curl: relocation error: /usr/lib/libcurl.so.4: symbol SSL_COMP_free_compression_methods, version OPENSSL_1.0.0 not defined in file libssl.so.1.0.0 with link time reference

我确实按照 Beyond Linux from Scratch 说明构建了 OpenSSL 1.0.2n(以及之前的 1.0.2l)(这里)。这涉及到向 ld 脚本应用补丁文件,从而添加版本控制信息。受影响程序的错误消息中提到的所有符号都是由补丁添加的,这让我怀疑该补丁破坏了某些东西。

我发现可以通过重建每个受影响的程序来解决该错误。例如,我在安装了新版本的 OpenSSL 的情况下重建了curl(它也恰好有更新的版本可用),并且curl 现在可以工作了。我愿意重建所有受影响的程序,但我突然想到,这完全违背了使用共享库的初衷。

这个错误是由 BLFS 页面上显示的补丁引入的吗?如果我在没有补丁的情况下重建 OpenSSL(并重建依赖于 OpenSSL 的程序),这是否会阻止我在未来有 OpenSSL 更新时需要重建依赖程序?

相关内容