次のようにリンクされた実行可能ファイルがあります。
$ 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 ライブラリです。私は1.0.1ライブラリを試してみたかったので、私のホームディレクトリにライブラリを構築しました。a.out
新しいopensslライブラリに簡単に再リンクする方法はありますか?避けたい
- 再接続する必要があります
a.out
(ビルドツールが非常に複雑なため) - グローバル設定の変更(他の開発者がこのコンピュータで作業しているため)
ここで私が望むようにできますか?
答え1
この特定の実装を一時的に別のライブラリに置き換えることができます。 Linuxでは、環境変数LD_LIBRARY_PATHは、標準ディレクトリセットの前にライブラリを検索する必要があるコロンで区切られたディレクトリセットです。これは、新しいライブラリをデバッグしたり、特別な目的で非標準ライブラリを使用したりするときに便利です。環境変数LD_PRELOADは、/etc/ld.so.preloadなど、標準セットを扱う機能を持つ共有ライブラリを一覧表示します。 -共有ライブラリ
ローダーを直接呼び出すこともできます。
/lib/ld-linux.so.2 --ライブラリパス
path
executable
答え2
環境変数を設定するラッパースクリプトを作成しますLD_LIBRARY_PATH
。PATH
共有ライブラリウィジェットです。システム検索パスは常にリストされているディレクトリを検索します$LD_LIBRARY_PATH
。より動的リンカーマニュアル参考用。
#!/bin/sh
export LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib
exec /path/to/a.out "$@"
またはコマンドラインから一度に直接:
LD_LIBRARY_PATH=~/opt/openssl-1.0.1/lib ./a.out
または、バイナリを変更するには、次のようにします。chrpath、実行可能ファイル内で組み込みライブラリの検索パスを編集できます。