すでにコンパイルされたバイナリの 'rpath' を変更できますか? 質問する

すでにコンパイルされたバイナリの 'rpath' を変更できますか? 質問する

スクラップ ヒープに予定されている古い実行可能ファイルがありますが、まだそこにはありません。このファイルは、私の環境から削除されたいくつかのライブラリに依存していますが、正常に動作するスタブ ライブラリがどこかにあります。この実行可能ファイルをこれらのスタブ ライブラリにポイントしたいと思います。はい、LD_LIBRARY_PATH を設定することはできますが、この実行可能ファイルは多くのスクリプトや多くのユーザーから呼び出されるため、1 か所で修正したいと思っています。

これのソースは持っていないので、入手するのは難しいでしょう。考えてみたのですが、ELF 対応のエディタを使用してこのファイルを編集し、rpath に単純な PATH を追加して新しいライブラリにヒットさせることはできますか? これは可能ですか? それとも、ELF バイナリを作成したら、場所を固定して移動できなくなるのでしょうか?

ベストアンサー1

より普遍的なツールがあり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

問題なく成功します。

おすすめ記事