リンカーが表示できるように、現在のディレクトリのパスを bash に表示するにはどうすればよいですか?

リンカーが表示できるように、現在のディレクトリのパスを bash に表示するにはどうすればよいですか?

共有ライブラリをロードしようとしていますが、ローダーが探しているディレクトリに対応する.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_direxportld

ベストアンサー1

タイプミスがあるようです。

$path_to_dir ./exe "bla bla"

この呼び出しには$path_to_dir2つのパラメータが使用されます。おそらくそうです。

$path_to_dir/exe "bla bla"

これは単一の引数で実行可能ファイルを呼び出します。同じ呼び出しでLD_LIBRARY_PATHを設定することもできます。

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD $path_to_dir/exe "bla bla"

おすすめ記事