您可以在不重新编译的情况下更改动态链接目标吗?

Mat*_*ine 7 symlink dynamic-linking

我下载了一个程序,不幸的是它没有作为源代码分发。当我去运行它时,我收到错误

加载共享库时出错:libjpeg.so.62:无法打开共享对象文件:没有这样的文件或目录

该程序似乎已链接到我的发行版没有的特定版本的 libjpeg。创建一个/usr/lib32/libjpeg.so.62以我的实际命名的符号链接可以libjpeg.so解决这个问题,但/usr/lib32只是为了让一个程序工作而四处游荡似乎很愚蠢而且过分。

有没有办法(无需重新编译)使程序动态链接libjpeg.so而不是libjpeg.so.62

FWIW,file该程序的信息是

ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 5

对文件进行二进制编辑(vim -b例如,使用)并替换任何出现的/usr/lib32/libjpeg.so.62与您的路径libjpeg.so完全相同的路径,例如/usr/lib//////libjpeg.so

/usr/lib32/libjpeg.so.62
/usr/lib//////libjpeg.so
Run Code Online (Sandbox Code Playgroud)

  • 该应用程序可能已正确链接,库有版本[出于某种原因](http://www.tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html)。ABI 兼容性是主要问题,例如参见 http://upstream-tracker.org/versions/libjpeg.html。这样的命名方式粗俗,但有效,还有[替代](http://www.trevorpounds.com/blog/?p=33)。 (2认同)