我有一个应用程序,称之为
Animal.app
。 在其 Contents/Frameworks
文件夹内是一个框架,例如 Mammal.framework
。 在框架的 Versions/A/Frameworks
文件夹中,我有 dog.dylib
。 dog.dylib
的安装名称是@rpath/dog.dylib。 对于框架的"Runpath Search Paths"
设置,我指定了@loader_path/../Frameworks
。 (我对最后一个设置的推理是 dylib 的“加载器”将是框架的二进制文件,位于路径 Mammal.framework/Versions/A/Mammal
。)
我在运行时收到错误消息:
Dyld Error Message:
Library not loaded: @rpath/dog.dylib
Referenced from: /Volumes/VOLUME/*/Animal.app/Contents/MacOS/../Frameworks/Mammal.framework/Versions/A/Mammal
Reason: image not found
我已经阅读了Apple的“运行路径依赖库”文档,以及Mike Ash关于
@rpath
的博客文章,但我仍然看不出我做错了什么。
事实证明,正确的runpath搜索路径是
@loader_path/Frameworks
。 我缺少的是 @loader_path 代表的不是加载程序的完整路径,而是该路径减去其最后一个组件。 Mike Ash 的博客文章 确实这么说,但我不知何故错过了。 因此,在框架的情况下,@loader_path 以 A 结尾。