Solarisでは、次のようにいくつかのものをリンクします(Sun Studioを使用します。内部では、GNUではなくSolarisリンカーを使用します)。
CC -shared (other flags) -R'$ORIGIN/../lib/' -o /buildpath/lib/libmylib1.so
CC -shared (other flags) -R'$ORIGIN/../lib/' -lmylib1 -o /buildpath/lib/libmylib2.so
CC (various flags) -R'$ORIGIN/../lib/' -lmylib2 -o /buildpath/bin/somebinary
...そしてそれは最終的なバイナリをうまくリンクします。
LinuxでGNUを使用してこれを実行しようとするとld
(ここでもコンパイラドライバーとしてSun Studioを使用)、共有オブジェクトは正常somebinary
にリンクされますが、libmylib1.soが見つからないためリンクに失敗します。
straceを介して3行目を実行すると、パスにリテラル(展開されていない)文字列が含まれているファイルを開こうとします$ORIGIN
。
私はこのトピックに触れている他の多くの質問に出くわしました。私が見た唯一の回避策は相対パスを使用することですが、これには固定の場所からバイナリを実行する必要があります`pwd`
。つまり、バイナリの場所ではなく相対パスをチェックします。
$ORIGIN
誰かが安全でない/安全でないことについての通常のコメントでチャイムを鳴らす前に-それは私たちの環境では問題ではありません、そして私はそれについてのコメントを聞くことを気にしません。