特定の実行可能ファイルのリンクライブラリの変更(CentOs 6)

特定の実行可能ファイルのリンクライブラリの変更(CentOs 6)

次のようにリンクされた実行可能ファイルがあります。

  $ 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_PATHPATH共有ライブラリウィジェットです。システム検索パスは常にリストされているディレクトリを検索します$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、実行可能ファイル内で組み込みライブラリの検索パスを編集できます。

関連情報