関連しますが、質問には答えません:
OSX では、パッケージャー マネージャーによって提供される動的ライブラリが非標準ディレクトリにインストールされています。この install_name は単なるファイル名です。例えば:
$ ROOT=$PWD
$ mkdir $ROOT/foo
$ cd $ROOT/foo
$ echo 'int foo(int a, int b){return a+b;}' > foo.c
$ clang foo.c -dynamiclib -install_name libfoo.dylib -o libfoo.dylib
を使用して libfoo.dylib の install_name を (絶対パス、@RPATH、...) 変更したくありませんinstall_name_tool -id
。
次に、プログラムをライブラリにリンクします。たとえば、次のようになります。
$ mkdir $ROOT/bar
$ cd $ROOT/bar
$ echo 'int foo(int,int); int main(){return foo(2,4);}' > main.c
$ clang main.c -L../foo -lfoo
プログラムを実行できません:
$ ./a.out
dyld: Library not loaded: libfoo.dylib
Referenced from: $ROOT/bar/./a.out
Reason: image not found
Trace/BPT trap: 5
なぜなら:
$ otool -L ./a.out
./a.out:
libfoo.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
依存ライブラリのパスを変更できます。
$ install_name_tool -change libfoo.dylib ../foo/libfoo.dylib a.out
それで:
$ otool -L ./a.out
./a.out:
../foo/libfoo.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
プログラムは次を実行できます。
$ ./a.out
$ echo $?
6
コマンドに追加できるclangオプションはありますか:
$ clang main.c -L../foo -lfoo
実行する必要を避けるために:
$ install_name_tool -change libfoo.dylib ../foo/libfoo.dylib a.out
注:変更したくない、DYLD_LIBRARY_PATH
またはそのような他の環境変数。
?