Es gibt ein universelleres Tool als chrpath genannt patchelf . Es wurde ursprünglich zur Verwendung beim Erstellen von Paketen für Nix und NixOS (Paketsystem und eine GNU/Linux-Distribution) erstellt.
Falls es keinen rpath in einer Binärdatei gibt (hier rdsamp genannt), chrpath schlägt fehl:
chrpath -r '$ORIGIN/../lib64' rdsamp
rdsamp: no rpath or runpath tag found.
Andererseits
patchelf --set-rpath '$ORIGIN/../lib64' rdsamp
gelingt prima.
Es gibt ein Tool namens chrpath das kann das - es ist wahrscheinlich in den Paketen Ihrer Distribution verfügbar.
Genau wie @user7610 sagte, der richtige Weg ist der patchelf Werkzeug.
Aber ich habe das Gefühl, dass ich eine umfassendere Antwort geben kann, die alle Befehle abdeckt, die man braucht, um genau das zu tun.
Für einen umfassenden Artikel zu diesem Thema klicken Sie hier
Zunächst einmal sprechen viele Entwickler von RPATH , aber eigentlich bedeuten sie RUNPATH . Dies sind zwei verschiedene optionale dynamische Abschnitte, und der Lader handhabt sie sehr unterschiedlich. Sie können mehr über den Unterschied zwischen ihnen in dem Link lesen, den ich zuvor erwähnt habe.
Denken Sie vorerst nur daran:
- Falls
RUNPATHgesetzt ist,RPATHwird ignoriert RPATHist veraltet und sollte vermieden werdenRUNPATHwird bevorzugt, da es durchLD_LIBRARY_PATHüberschrieben werden kann
Siehe den aktuellen R[UN]PATH
readelf -d <path-to-elf> | egrep "RPATH|RUNPATH"
Löschen Sie den R[UN]PATH
patchelf --remove-rpath <path-to-elf>
Hinweise:
- Entfernt beide
RPATHundRUNPATH
Werte zu R[UN]PATH hinzufügen
patchelf [--force-rpath] --set-rpath "<desired-rpath>" <path-to-elf>
Hinweise:
<desired-path>ist eine durch Doppelpunkte getrennte Verzeichnisliste, z. B.:/my/libs:/my/other/libs- Wenn Sie
--force-rpathangeben , setztRPATH, setzt andernfallsRUNPATH