我有一个依赖于希望在目录结构中找到共享库的程序。我想将共享库移到一个更好的位置。在OS X上,可以使用install_name_tool来完成。我找不到Linux的等效版本。
作为参考,readelf -d myprogram吐出以下解释的输出:
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:)
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,这不是我想要的,我不需要全局更改搜索路径。
HT-这可能会有所帮助。
HT是可执行文件的文件编辑器/查看器/分析器。目标是将调试器的低级功能与IDE的可用性相结合。我们计划实现所有(十六进制)编辑功能并支持最重要的文件格式。
我找不到与ZorbaTHut解决方案有很大不同的东西,但是也许可以输入一个长度不同的名称,并且仍然保持二进制有效。
gelf-这也可能有用。
GElf是用于处理ELF对象文件的通用,独立于ELF类的API。GElf提供了一个单一的通用接口来处理32位和64位ELF格式的目标文件。