非標準の場所にある共有ライブラリがプログラムの開始時に動的リンカーによって検出されるように、コンパイル時に実行可能ファイル (リンカー用) のランタイム パスを Mac OSX で設定したいと考えています。
Linux ではこれを-Xlinker -rpath -Xlinker /path/to
(または を使用して-Wl,-rpath,/path/to
) 行うことができ、Solaris-R/path/to
ではコンパイラ コマンド ラインに追加できます。
Mac OS X gcc が 10.5 以降、つまり 2008 年以降 -rpath をサポートしているという情報を見つけました。
最小限の例で動作させようとしましたが、成功しませんでした:
$ cat blah.c
int blah(int b)
{
return b+1;
}
と:
$ cat main.c
#include <stdio.h>
int blah(int);
int main ()
{
printf("%d\n", blah(22));
return 0;
}
次のようにコンパイルしました。
$ gcc -c blah.c
$ gcc -dynamiclib blah.o -o libblah.dylib
$ gcc main.c -lblah -L`pwd` -Xlinker -rpath -Xlinker `pwd`/t
今テスト:
$ mkdir t
$ mv libblah.dylib t
$ ./a.out
dyld: Library not loaded: libblah.dylib
Referenced from: /Users/max/test/./a.out
Reason: image not found
Trace/BPT trap
したがって、質問: Mac OSX でリンカーのランタイム パスを設定するにはどうすればよいですか?
ところで、設定DYLD_LIBRARY_PATH
は機能しますが、このハックを使用したくありません。
編集:についてotool -L
:
$ otool -L a.out
a.out:
libblah.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
otool -L
実行可能ファイルがリンクされたライブラリ名(およびおそらくリンク時の場所)のみを出力し、ランタイムパス情報は出力しないようです。