一尘不染

构建依赖于共享库的程序后,如何更改共享库的文件名?

linux

我有一个依赖于希望在目录结构中找到共享库的程序。我想将共享库移到一个更好的位置。在OS
X上,可以使用install_name_tool来完成。我找不到Linux的等效版本。

作为参考,readelf -d myprogram吐出以下解释的输出:

Dynamic section at offset 0x1e9ed4 contains 30 entries:
  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [this/is/terrible/library.so]
 0x00000001 (NEEDED)                     Shared library: [libGL.so.1]
 0x00000001 (NEEDED)                     Shared library: [libGLU.so.1]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]
(continues in an uninteresting fashion)

(根据要求,ldd myprogram:)

    linux-gate.so.1 =>  (0x0056a000)
    this/is/terrible/library.so => not found
    libGL.so.1 => /usr/lib/mesa/libGL.so.1 (0x0017d000)
    libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00a9c000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00710000)
   (etc, etc)

我想将“ this / is / terrible / library.so”更改为“ shared /
library.so”。请注意,如果程序留在其“构建”位置,即this / is / terrible /
library.so的相对路径实际存在的位置,那么ldd可以按照您的期望找到它。

我了解RPATH,这不是我想要的,我不需要全局更改搜索路径。


阅读 252

收藏
2020-06-03

共1个答案

一尘不染

HT-这可能会有所帮助。

HT是可执行文件的文件编辑器/查看器/分析器。目标是将调试器的低级功能与IDE的可用性相结合。我们计划实现所有(十六进制)编辑功能并支持最重要的文件格式。

我找不到与ZorbaTHut解决方案有很大不同的东西,但是也许可以输入一个长度不同的名称,并且仍然保持二进制有效。

gelf-这也可能有用。

GElf是用于处理ELF对象文件的通用,独立于ELF类的API。GElf提供了一个单一的通用接口来处理32位和64位ELF格式的目标文件。

2020-06-03