@rpath 用于嵌入框架中的动态库

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

我有一个应用程序,称之为

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
的博客文章,但我仍然看不出我做错了什么。

macos dynamic-linking rpath
1个回答
9
投票

事实证明,正确的runpath搜索路径是

@loader_path/Frameworks
。 我缺少的是 @loader_path 代表的不是加载程序的完整路径,而是该路径减去其最后一个组件。 Mike Ash 的博客文章 确实这么说,但我不知何故错过了。 因此,在框架的情况下,@loader_path 以 A 结尾。

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