9

いくつかの .so ライブラリを暗黙的にロードする実行可能ファイルがあり、それらはすべて私がビルドしました。展開、または少なくともテスト/デバッグのために、それらをすべて同じディレクトリに配置したいと思います。

my_executable
libmylib1.so
libmylib2.so

実行可能ファイルがライブラリを暗黙的にロードするようにするには、実行可能ファイルのディレクトリに rpath (DT_RUNPATH) を設定したいと思います。OS X では、次のようにします。

clang -dynamiclib -o libmylib1.dylib -install_name @rpath/libmylib1.dylib src1.c src2.c    
clang -dynamiclib -o libmylib2.dylib -install_name @rpath/libmylib2.dylib src3.c src4.c
clang -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath,@loader_path/. main.c

@loader_path/.OS Xで実行可能ファイルのrpathを形成することに注意してください.Linuxでは、これに最も近いのは

gcc -dynamiclib -o libmylib1.so src1.c src2.c    
gcc -dynamiclib -o libmylib2.so src3.c src4.c
gcc -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath=. main.c

ここでの問題は、Linux では rpath が実行可能ファイルのディレクトリではなく、現在の作業ディレクトリに従うことです。Linuxで同じことを達成する方法はありますか?

4

2 に答える 2

6

リテラル文字列を実行パスとして使用する必要があります$ORIGIN。これは、動的ローダーによって実行可能ファイルの場所として認識されます。

于 2012-09-13T03:38:10.653 に答える
2

一般的な解決策は、実際の実行可能ファイルを実行する前に、実行可能ファイルがどのディレクトリにあるかを把握し、LD_LIBRARY_PATH を適切に設定するシェル スクリプト ラッパーを作成することです。

于 2012-09-13T03:38:29.613 に答える