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