実行可能ファイルを動的ライブラリに強制的にリンクする方法

実行可能ファイルを動的ライブラリに強制的にリンクする方法

このコンパイルされた実行可能ファイルがあります。

./run.x

別のコンピュータに移動しましたが、動的依存関係を満たしていません。

ldd ./run.x
        libx.1.so => not found

ただし、2番目のシステムには同じライブラリの最新バージョンがあります(ただし、Linuxカーネルと他のリソースは同じです)。私の質問は:他の共有オブジェクトを強制的にリンクすることは可能ですか?

ldd ./run.x
        libx.1.so => libx.2.so

シンボリックリンクを作成する必要もなく、libx.1.so => libx2.soアプリケーション全体を再コンパイルする必要もありません(これを行わない理由は十分あります)。

答え1

あなたできるしかし、バイナリからリンク名をパッチするのは良い考えではありません。ライブラリのバージョン(技術的には対応する名前)が変更された場合、これは以前のバージョンと互換性のない方法で変更されたことを意味するため、実行可能ファイルが新しいライブラリで動作するという保証はありません。

この問題を解決するには、古いライブラリをコピーするか、実行可能ファイルを再コンパイルする必要があります。

関連情報