ディレクトリ構造の奥深くにある共有ライブラリに依存するプログラムがあります。その共有ライブラリをより良い場所に移動したいと思います。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 については知っていますが、探しているものではありません。検索パスをグローバルに変更する必要はありません。