Como posso alterar o nome do arquivo de uma biblioteca compartilhada depois de criar um programa que depende dele?

Eu tenho um programa que depende de uma biblioteca compartilhada que espera encontrar profundamente dentro de uma estrutura de diretórios. Eu gostaria de mudar a biblioteca compartilhada para um lugar melhor. No OS X, isso pode ser feito com install_name_tool. Não consigo encontrar um equivalente para o Linux.

Para referência,readelf -d myprogram cospe a seguinte saída parafraseada:

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)

(e por solicitação,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)

e eu gostaria que a errata "this / is / terrible / library.so" seja "shared / library.so". Note que, se o programa for deixado em seu local "construído", onde o caminho relativo / é / terrible / library.so existe, o ldd poderá encontrá-lo, como seria de esperar.

Eu sei sobre o RPATH e não é o que estou procurando, não preciso alterar os caminhos de pesquisa globalmente.

questionAnswers(4)

yourAnswerToTheQuestion