gpt4 book ai didi

macos - RPATH 扩展失败

转载 作者:行者123 更新时间:2023-12-01 09:05:35 27 4
gpt4 key购买 nike

我在 OS X 上构建了一个可执行文件(名为 demux),但它总是无法加载而且我找不到原因:

$ ./demux
RPATH failed to expanding @rpath/sfeMovie.framework/Versions/2.0/sfeMovie to: @executable_path/sfeMovie.framework/Versions/2.0/sfeMovie
dyld: Library not loaded: @rpath/sfeMovie.framework/Versions/2.0/sfeMovie
Referenced from: …current_dir/./demux

框架在可执行文件旁边。 Otool 显示以下内容:

$ otool -L sfeMovie.framework/Versions/2.0/sfeMovie 
sfeMovie.framework/Versions/2.0/sfeMovie:
@rpath/sfeMovie.framework/Versions/2.0/sfeMovie (compatibility version 2.0.0, current version 2.0.0)

和:

$ otool -L demux 
demux:
@rpath/sfeMovie.framework/Versions/2.0/sfeMovie (compatibility version 2.0.0, current version 2.0.0)

鉴于此,我认为将@executable_path 添加到可执行文件的运行时搜索路径将允许它查看任何框架和库,其相对安装名称仅以@rpath 为前缀(如@rpath/sfeMovie.framework/…) 并且它在可执行文件旁边。要确保此运行时搜索路径正确:

$ otool -l demux | grep LC_RPATH -A 2
cmd LC_RPATH
cmdsize 32
path @executable_path (offset 12)

但这失败了,我不知道为什么。对我而言,@executable_path/sfeMovie.framework/Versions/2.0/sfeMovie 看起来是正确的路径,但它仍然失败……@rpath 或@executable_path 是否有任何误用?

最佳答案

我能够通过快速测试项目重现您的问题。当我将尾部斜杠附加到 LD_RUNPATH_SEARCH_PATH build设置时,它已修复。

代替:

@executable_path

你应该试试

@executable_path/

otool -l 的输出现在看起来像这样:

      cmd LC_RPATH
cmdsize 32
path @executable_path/ (offset 12)

通常,您可以使用我位于 https://github.com/liyanage/macosx-shell-scripts/blob/master/checklibs.py 的 dyld 分析器脚本检查您的顶层可执行文件(在本例中为“demux”)

./checklibs.py demux

此工具试图忠实地再现 dyld 的解析逻辑。它通常可以提供有关哪些引用不起作用的提示,但在这种情况下,它不会发现缺少尾部斜杠的问题。我将相应地更新它以匹配 dyld 的行为。

关于macos - RPATH 扩展失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22261396/

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