次のようにリンクされた実行可能ファイルがあります。
$ ldd a.out
libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000)
libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000)
librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000)
.
.
Libcryptoおよびlibsslライブラリはopenssl 1.0.0-fips libsです。代わりに1.0.1ライブラリを試したいので、ホームディレクトリにビルドしました。 a.out
を使用して、新しいopensslライブラリに大きな負担をかけずに再リンクする方法はありますか?避けたい
a.out
を再リンクする必要がある(ビルドツールは非常に複雑なため)私がここで望んでいることをすることは可能ですか?
この特定の実行を一時的に別のライブラリに置き換えることができます。 Linuxでは、環境変数LD_LIBRARY_PATHは、コロンで区切られたディレクトリのセットであり、標準のディレクトリのセットの前にライブラリを最初に検索する必要があります。これは、新しいライブラリをデバッグするとき、または特別な目的で非標準のライブラリを使用するときに役立ちます。環境変数LD_PRELOADは、/ etc/ld.so.preloadと同様に、標準セットをオーバーライドする関数を含む共有ライブラリをリストします。 - 共有ライブラリ
ローダーを直接呼び出すこともできます。
/lib/ld-linux.so.2 --library-path
path
executable
LD_LIBRARY_PATH
環境変数を設定するラッパースクリプトを記述します。これは、共有ライブラリ用のPATH
のペンダントです。システム検索パスは、常に$LD_LIBRARY_PATH
にリストされているディレクトリの後に検索されます。参考として ダイナミックリンカーマニュアル を参照してください。
#!/bin/sh
export LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib
exec /path/to/a.out "$@"
または、1回限りの場合は、コマンドラインで直接:
LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib ./a.out
または、バイナリを変更する場合は、 chrpath を試してください。これにより、実行可能ファイルに組み込まれたライブラリ検索パスを編集できます。