我想在編譯時在Mac OSX下設置可執行文件(用於鏈接器)的運行時路徑,以便在程序啓動時由動態鏈接器找到非標準位置的共享庫。如何在Mac OSX下使用gcc設置可執行文件的運行時路徑(-rpath)?
在Linux下,這可能與-Xlinker -rpath -Xlinker /path/to
(或使用-Wl,-rpath,/path/to
)並且在Solaris下,您可以將-R/path/to
添加到編譯器命令行。
我發現some information是Mac OS X的GCC有自10.5 -rpath支持,即自2008年〜
我試圖把它與一個小例子,工作 - 沒有成功:
$ 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
只打印庫名稱(和可能的位置在鏈接時)的可執行文件反對票和運行路徑信息鏈接。
我沒有一個OS X系統,但周圍搜索,[install_name_tool](http://developer.apple.com/ library/mac/#documentation/Darwin/Reference/ManPages/man1/install_name_tool.1.html)可以將rpath添加到您的二進制文件中。不知道你爲什麼不工作 - 「otool -L」說什麼? – ephemient 2010-12-22 22:38:33