Wie kann ich den Dateinamen einer gemeinsam genutzten Bibliothek ändern, nachdem ich ein Programm erstellt habe, das davon abhängt?

Ich habe ein Programm, das von einer gemeinsam genutzten Bibliothek abhängt, die es erwartet, tief in einer Verzeichnisstruktur zu finden. Ich möchte diese gemeinsam genutzte Bibliothek an einen besseren Ort bringen. Unter OS X kann dies mit install_name_tool erfolgen. Ich kann kein Äquivalent für Linux finden.

Als Referenz,readelf -d myprogram spuckt die folgende umschriebene Ausgabe aus:

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)

(und auf Anfrageldd 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)

und ich möchte "this / is / terrible / library.so" als "shared / library.so" errata. Beachten Sie, dass ldd das Programm finden kann, wenn es an seinem "erstellten" Speicherort verbleibt, an dem der relative Pfad / is / terrible / library.so tatsächlich existiert.

Ich kenne RPATH und es ist nicht das, wonach ich suche. Ich muss die Suchpfade nicht global ändern.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage