rpath)与Mac OSX下的gcc可执行文件?

我想在编译时在Mac OSX下设置可执行文件(用于链接器)的运行时路径,以便在程序启动时由动态链接程序找到非标准位置的共享库。

在Linux下,可以使用-Xlinker -rpath -Xlinker /path/to (或使用-Xlinker -rpath -Xlinker /path/to-Xlinker -rpath -Xlinker /path/to -Wl,-rpath,/path/to )并在Solaris下将-R/path/to添加到编译器命令行。

从10.5版本开始,我发现了一些Mac OS X gcc支持-rpath支持的信息,即自2008年以来。

我试图用一个小例子来工作 - 没有成功:

$ cat blah.c 
int blah(int b)
{
  return b+1;
}

和:

$ cat main.c 

#include <stdio.h>

int blah(int);

int main ()
{
  printf("%dn", 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仅打印可执行文件所链接的库名称(可能在链接时存在位置),并且没有运行时路径信息。


通过实验发现,并检查由Xcode生成的命令行以供Dave Driblin参考的rpath演示项目使用:

otool -L显示链接库的安装名称。 要使@rpath正常工作,您需要更改库的安装名称:

$ gcc -dynamiclib blah.o -install_name @rpath/t/libblah.dylib -o libblah.dylib
$ mkdir t ; mv libblah.dylib t/
$ gcc main.c -lblah -L`pwd`/t -Xlinker -rpath -Xlinker `pwd`
链接地址: http://www.djcxy.com/p/56769.html

上一篇: rpath) of an executable with gcc under Mac OSX?

下一篇: In Mac OSX 10.5, it can't find my Terminal commands sudo, find, etc