gpt4 book ai didi

macos - 如何在Mac OSX下使用gcc设置可执行文件的运行时路径(-rpath)?

转载 作者:行者123 更新时间:2023-12-01 22:23:59 36 4
gpt4 key购买 nike

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

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

我发现some information自10.5(即〜2008年以来)开始支持Mac OS X gcc。

我试图通过一个最小的例子来使其工作-没有成功:

$ 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仅显示可执行文件所链接的库名(可能是链接时的位置),而没有打印运行时路径信息。

最佳答案

通过实验发现,并检查Xcode生成的reference rpath demo project by Dave Driblin命令行:
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`

关于macos - 如何在Mac OSX下使用gcc设置可执行文件的运行时路径(-rpath)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61163333/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com