Как я могу изменить имя общей библиотеки после создания программы, которая зависит от нее?

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

Ответы на вопрос(4)

Ваш ответ на вопрос