我有一个程序,它依赖于一个共享库,它希望在目录结构的深处找到。我想把那个共享库移到一个更好的地方。在 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 并且它不是我想要的,我不需要全局更改搜索路径。