指定されたライブラリを使用したプログラムの実行

指定されたライブラリを使用したプログラムの実行

システム変数を検索する代わりに、プログラムが使用する必要があるライブラリへのパスを指定できますか?

答え1

ここにはいくつかのオプションがあります。最も一般的なもの

LD_LIBRARY_PATH=/custom/path:$LD_LIBRARY_PATH ./yourprogram

第二に、少し強力です。

LD_PRELOAD=/custom/path/lib.so ./yourprogram

1つ目は、検索リストにパスを最初に入力することです。 2番目は、他のライブラリをロードする前にライブラリをロードします。デフォルトの検索パスを完全に削除することはありません。動的にロードされたすべてのライブラリを交換したくない場合は問題ありません。

独自のプログラムをコンパイルする場合は、より多くのオプションがあります。静的にリンクするか(.aライブラリの全部または一部のみ)、ランタイム検索パスを設定できます。これを行うためのオプションは、コンパイラによって異なる場合があります。

コメントを追加:

空のパスを追加することが心配な場合は、LD_LIBRARY_PATH次のものを使用できます。

LD_LIBRARY_PATH=/custom_path${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ./myprogram

ワンタイムコマンドの場合は少し複雑ですが、全体的にはより安全です。この点を指摘したStephen Kittに感謝します。

答え2

ライブラリをプリロードすると、動的リンカは他のライブラリを見つける前にそのライブラリを使用してシンボルをバインドします。

LD_PRELOAD=/path/to/library.so program

次の方法で事前に確認できますldd

LD_PRELOAD=/path/to/library.so ldd program

成功すると、/path/to/library.so要求されたシステムライブラリの代わりに出力が表示されますprogram

関連情報