如何强制可执行文件链接动态库

如何强制可执行文件链接动态库

我有这个已编译的可执行文件:

./run.x

我已将其移至其他计算机,但动态依赖关系不满足:

ldd ./run.x
        libx.1.so => not found

然而,在第二台计算机上存在同一库的更新版本(但 Linux 内核以及其他资源是相同的)。我的问题是:是否可以强制它链接其他共享对象:

ldd ./run.x
        libx.1.so => libx.2.so

无需创建符号链接libx.1.so => libx2.so,也无需重新编译整个应用程序(我有充分的理由不这样做)。

答案1

可以修补二进制文件中的链接名称,但这不是一个好主意。如果库更改了其版本(从技术上讲,是其 soname),则意味着它以向后不兼容的方式进行更改,因此无法保证您的可执行文件可以与新库一起使用。

要解决此问题,您需要复制旧库或重新编译可执行文件。

相关内容