リンカーがテスト用の.soライブラリーを見つけるために使用するパスの一部を削除したいと思います。
ライブラリパスを追加する方法を見つけました。
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/path/to/library"
LD_LIBRARY_PATH
にない/usr/local/lib
や/usr/lib
などのライブラリパスを削除するために使用できるLD_LIBRARY_PATH
に似た変数はありますか?つまり/etc/ld.so.conf.d/で指定されたパスを無視するにはどうすればよいですか?
これは、特定の実行可能ファイルに対して、ライブラリの依存関係を再帰的に見つけるプログラムを作成するのに忙しいためです。すべての依存関係を見つけ、それらの依存関係をローカルディレクトリにコピーし、LD_LIBRARY_PATHをセットアップして実行可能ファイルを実行するためのローカル実行bashスクリプトを作成することで、プログラムをよりポータブルにすることができるかどうかを確認したいと思います。以前に重要なライブラリ検索パスが削除された後、このlocal-run-executableが機能するかどうかをテストしたいと思います。
共有ライブラリにrpath機能を介した埋め込みパスがある場合、削除ライブラリパスに興味があります。これらは、ライブラリーがリンカーによって作成されたときに追加されます。
chrpath
を使用して、これらのパスを削除(または変更)できます。たとえば、
chrpath -d mylibraryfile.so
LD_LIBRARY_PATH
変数からパス名を削除することも可能性のある領域です。文字列の置換と変数の再エクスポートにより、これを行うことができます。しかし、問題はそれに関係していないようです。 LD_LIBRARY_PATH
をキャンセルするための変数はありません。
seeingライブラリの依存関係の場合、/etc/ld.so.conf.d/
について言及すると、プラットフォームがLinuxのみであるかのように聞こえます。 ldd
を使用して、依存関係を一覧表示できます。 OSXを除いて、すべてのBSDはldd
もサポートしています。これは、この目的で使用するスクリプトの1つです。
#!/bin/sh
# $Id: ldd-path,v 1.1 2007/07/09 19:30:28 tom Exp $
# Edit the output of ldd for the given parameters, yielding only the
# absolute pathnames.
ldd $* | sed \
-e 's/([^)]*)//g' \
-e 's/^.*=>//' \
-e 's/[ ][ ]*//g' \
-e '/^$/d'
しかし(コメントのアドレス指定)、ローダーにignore既存のパスを通知するポータブルなメカニズムはありません。 GNU ldドキュメンテーションは、求められるものの概要、および -rpath
オプションの説明における順序を提供します。これらの項目はリストを締めくくります:
- デフォルトのディレクトリ、通常は
/lib
および/usr/lib
。- ELFシステムのネイティブリンカーの場合、ファイル
/etc/ld.so.conf
が存在する場合、そのファイルで見つかったディレクトリのリスト。
参考文献