我有这个已编译的可执行文件:
./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),则意味着它以向后不兼容的方式进行更改,因此无法保证您的可执行文件可以与新库一起使用。
要解决此问题,您需要复制旧库或重新编译可执行文件。