chrpath よりも汎用的なツールがあります patchelf と呼ばれる .もともとは、Nix および NixOS (パッケージング システムおよび GNU/Linux ディストリビューション) のパッケージを作成するために作成されました。
バイナリ (ここでは rdsamp と呼ばれる) に rpath がない場合、chrpath 失敗:
chrpath -r '$ORIGIN/../lib64' rdsamp
rdsamp: no rpath or runpath tag found.
一方、
patchelf --set-rpath '$ORIGIN/../lib64' rdsamp
問題なく成功します。
chrpath というツールがあります これを行うことができます - おそらくあなたのディストリビューションのパッケージで利用可能です.
@ user7610 が言ったように、正しい方法は patchelf です
しかし、まさにそれを行うために必要なすべてのコマンドをカバーする、より包括的な答えを提供できると思います.
この件に関する包括的な記事については、ここをクリックしてください
まず第一に、多くの開発者は RPATH について話します。 、しかし実際には RUNPATH を意味します .これらは 2 つの異なるオプションの動的セクションであり、ローダーはそれらを非常に異なる方法で処理します。それらの違いについては、前に述べたリンクで詳しく読むことができます。
今のところ、覚えておいてください:
- If
RUNPATH設定されています、RPATH無視されます RPATHは推奨されておらず、避ける必要がありますRUNPATHLD_LIBRARY_PATHでオーバーライドできるため、優先されます
現在の R[UN]PATH を確認
readelf -d <path-to-elf> | egrep "RPATH|RUNPATH"
R[UN]PATH をクリア
patchelf --remove-rpath <path-to-elf>
注:
- 両方の
RPATHを削除します とRUNPATH
R[UN]PATH に値を追加
patchelf [--force-rpath] --set-rpath "<desired-rpath>" <path-to-elf>
注:
<desired-path>コロンで区切られたディレクトリリストです。例:/my/libs:/my/other/libs--force-rpathを指定した場合 、設定RPATH、それ以外の場合はRUNPATHを設定します