У меня есть программа, которая зависит от общей библиотеки, которую она ожидает найти внутри структуры каталогов. Я бы хотел переместить эту общую библиотеку и стать лучше. В 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". Обратите внимание, что если программа остается в своем "построенном" месте, где фактический путь//ужас/library.so существует, то ldd может найти его, как и следовало ожидать.
Я знаю о RPATH, и это не то, что я ищу, мне не нужно менять пути поиска по всему миру.