修改可执行文件的链接路径

modifying the linkage path of an executable

ldd 实用程序显示二进制可执行文件所依赖的共享对象文件,还显示该二进制可执行文件在文件系统上的路径。

是否可以在现有的可执行文件上修改此路径?例如,假设我有一个二进制 "foo.so",我说:

    libssl.so.0.9.8 => /opt/lib64/libssl.so.0.9.8

如果我将这个 .so 文件部署到 没有 在指定路径上有 lbssl.so.0.9.8 的机器,我当然会得到一个链接器使用 foo.so 时出错。那么,是否可以修改现有可执行文件的链接路径?

我意识到另一种解决方案是确保现有的链接路径指向一个有效的目标文件,实际上将目标文件复制到 ldd 显示的路径。但是假设我遇到的情况是不可行的。是否可以修改现有可执行文件的链接路径?

您所指的路径不是特定于可执行文件的。其系统特定。因此,当您将二进制文件从一台机器转移到另一台机器时,下一台机器可能具有完全不同的放置库设置。因此,机器 A 上的二进制文件可能 link 在 /usr/lib 中的库中,但下一台机器 B 可以配置为 link 到 /home/test/lib 中的库。仅举个例子。

当您希望可执行文件 link 到其他库(在 /home/test/lib 中)而不是默认库时。您可以通过设置 LD_LIBRARY_PATH=/home/test/lib 来实现。

看看http://wiredrevolution.com/system-administration/how-to-correctly-use-ld_library_path