複数のディレクトリの下で非標準の命名規則を使用して共有ライブラリをリンクすることに関して問題があります。実行可能ファイルの現在の場所で共有ライブラリを検索するには、生成された実行可能ファイルが必要ですが、この動作を強制するコマンド ライン パラメーターが見つかりません。
この動作を実証するために必要なのは、ディレクトリの下にある共有ライブラリだけです。
gcc -shared mylib.c -o some/dir/mylib.so
gcc main.c -o main -Lsome/dir -l:mylib.so
実行可能な mainは、次の ldd 出力を提供します。
ldd main
some/dir/mylib.so (0xf76e2000)
私が必要とする出力は次のとおりです。
ldd main
mylib.so => some/dir/mylib.so (0xf7700000)
この出力は、ライブラリの名前が慣例に従ってmylib.soではなくlibmylib.soである場合に作成できます。
mv some/dir/mylib.so some/dir/libmylib.so
gcc main.c -o main -Lsome/dir -lmylib
これにより、必要に応じて ldd リストのパスsome/dirも削除されます。
rpath の使用、および ld と gcc の両方のコマンド ライン オプションを調査しましたが、満足のいく解決策を見つけることができません。この場合、非標準の名前とディレクトリ構造の厳格な要件を簡単に変更することはできません。
私の質問は、ライブラリの依存関係を、gcc コマンド ライン オプションを介して 2 番目の ldd のように絶対ではなく、現在のディレクトリに対して強制的に相対的にする方法です。
お時間をいただきありがとうございます。問題を合理的に説明できたことを願っています。
ジョン。