Mac 中的动态链接器未读取 rpath

问题描述 投票:0回答:1

我正在 m2 mac 上编译一个简单的 C 程序,该程序依赖于 macOS 上使用 clang 的共享库。我使用 -Wl,-rpath,@executable_path/../saga 标志正确设置 rpath。我已经通过使用 otool 检查可执行文件来验证这一点,它显示了正确的 rpath。

但是,当我尝试运行该程序时,动态链接器(dyld)在指定路径中找不到该库。仅当我将 DYLD_LIBRARY_PATH 环境变量设置为库 (libdynamiclib.dylib) 所在的位置时,该程序才有效。

为什么 dyld 不使用我设置的 rpath?我是否设置了错误的rpath?

这是我用来编译程序的命令:

clang -I../saga -L../saga -ldynamiclib -Wl,-rpath,@executable_path/../saga -o main main.c

c macos dynamic-linking
1个回答
0
投票

Rpath 仅对于实际使用

@rpath
的查找很重要,但看起来你的库并不重要。它的安装名称只是
libdynamiclib.dylib
,但它需要是
@rpath/libdynamiclib.dylib

运行此命令,然后重新编译您的主二进制文件:

install_name_tool -id '@rpath/libdynamiclib.dylib' ../saga/libdynamiclib.dylib
codesign -s - -f -o linker-signed ../saga/libdynamiclib.dylib

(第二个命令只是更新默认的链接器生成的签名,如果您有自己的协同签名过程,那么显然只需使用它即可。)

© www.soinside.com 2019 - 2024. All rights reserved.