共有ライブラリをロードしようとしていますが、ローダーが探しているディレクトリに対応する.soファイルがないため、環境ディレクトリを設定しようとしています。
$ ls # (current dir is bindir)
foo.c foo.h libfoo.so exe
$ path_to_dir=/home/user/bindir
$ $path_to_dir ./exe "bla bla"
bash: /home/user/bindir: Is a directory
これはマイナーなものかもしれませんが、通常は変更された環境変数を使用してプログラムを実行しませんが、どのように設定しますか?
私がそれを実行しようとすると$ export path_to_dir
:
$ ./exe "bla bla"
./_exe: error while loading shared libraries: libfoo.so: cannot open shared object file: No such file or directory
それでは、私のディレクトリの環境変数をどのように変更しますか?
編集:このチュートリアルによると:YouTubeライブラリのチュートリアルlibfoo.so
、リンカは私の現在のディレクトリを検索しないため、ライブラリ(私の場合)ファイルを見ることはできません。標準ライブラリを使用すると、ld
次のように理解されます。
$ld --verbose | grep -i search_dir | awk '{print $1}' RS=';'
SEARCH_DIR("=/usr/local/lib/x86_64-linux-gnu")
SEARCH_DIR("=/lib/x86_64-linux-gnu")
SEARCH_DIR("=/usr/lib/x86_64-linux-gnu")
SEARCH_DIR("=/usr/lib/x86_64-linux-gnu64")
SEARCH_DIR("=/usr/local/lib64")
SEARCH_DIR("=/lib64")
SEARCH_DIR("=/usr/lib64")
SEARCH_DIR("=/usr/local/lib")
SEARCH_DIR("=/lib")
SEARCH_DIR("=/usr/lib")
SEARCH_DIR("=/usr/x86_64-linux-gnu/lib64")
SEARCH_DIR("=/usr/x86_64-linux-gnu/lib")
したがって、この変数と上記の変数の間の目的は、as環境変数を設定して私のディレクトリを表示する$path_to_dir
ことです(それも試してみましたが、見てわかるように役に立ちません)。もしそうなら、私のライブラリを「見て」場所に依存しないプログラム(exe)に関連付けるために私のディレクトリを表示するにはどうすればよいですか?ld
$path_to_dir
export
ld
答え1
タイプミスがあるようです。
$path_to_dir ./exe "bla bla"
この呼び出しには$path_to_dir
2つのパラメータが使用されます。おそらくそうです。
$path_to_dir/exe "bla bla"
これは単一の引数で実行可能ファイルを呼び出します。同じ呼び出しでLD_LIBRARY_PATHを設定することもできます。
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD $path_to_dir/exe "bla bla"