0

コンパイルしてテストアプリケーションにリンクしたライブラリがあります。テスト アプリを実行すると、プロジェクト ディレクトリに相対的なディレクトリで .so を見つけようとしますが、アプリケーションは実行可能ファイルが配置されているフォルダーから実行されているため、ライブラリを見つけることができません。アプリがライブラリのディレクトリを検索するようにしたいので、.soが実行可能ファイルにあることを確認する必要があります.これを実現するためにコンパイルするときに、何らかの引数をgccに渡す必要がありますか?

4

3 に答える 3

1

このアプローチはあまり Linux-y とは思えません。ライブラリは、/lib または /usr/lib のどこかにある必要があり、ローダーがそこを探します。他のディレクトリにある場合はexport LD_LIBRARY_PATH=libpath、プログラムを実行する前に使用してみてください。

もう 1 つのオプションは、パスを指定できる dlopen を使用してライブラリを動的に開くことです。

dlopen(/path/to/library.so, RTLD_LAZY);

動的 .so ロードに関するより完全な例をここで見つけることができます: http://tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html

RPATH リンカー フラグを設定することもできます。これにより、特定のディレクトリで特定のライブラリが常に検索されます。

make LDFLAGS="-Wl,-R -Wl,/home/kris/src"

$ORIGIN 組み込み変数を使用して、現在のディレクトリを参照できます。

make CFLAGS="-fPIC" LDFLAGS="-Wl,-rpath '-Wl,\$\$ORIGIN'"
于 2013-11-09T02:52:34.030 に答える
-1

そのライブラリをフルパス名で含めることができます。

#include<absolute_path_name>

これは機能します。

于 2013-11-09T03:22:15.007 に答える