嵌入式框架与位于软件包外部的版本冲突

时间:2011-03-04 11:43:12

标签: cocoa xcode macos frameworks

我的一个Mac应用程序包含一个嵌入应用程序包的框架。现在我发现一些证据表明,在某些客户机器上,应用程序链接到位于/ System / Library / Frameworks文件夹中的同一框架。

当谈到将嵌入式框架链接到XCode中的应用程序时,我显然缺少一些东西,所以这就是我如何做到的......也许你可以指出我缺少的一步:

1)我将框架项目拖到我的项目中,并在两个项目之间建立依赖关系 2)我将框架项目的构建产品拖到我的目标的“Link Binary with Libraries”构建阶段 3)我将框架项目的构建产品拖到我的目标设置为“目标:框架”的“复制框架文件”构建阶段

这一切都很好但我需要指定我想要链接嵌入式框架版本而不是系统上可能找到的任何框架版本。是否有搜索路径可以在某处设置?还是“静态”链接?

任何帮助都将不胜感激。

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

听起来你可能错过了一个关键步骤。您还需要设置嵌入式框架的“安装名称”

当您链接框架或动态库时,您的应用程序将在框架的安装名称指定的路径中查找框架。这应该指定嵌入式框架的相对路径。如果它是绝对名称,它将获取系统安装的版本,即使您已嵌入库。

要检查安装名称,请执行以下操作并查看第一个位置。

otool -L <framework-binary>

这两篇博客文章解释了这个问题以及如何正确设置所有内容:

此外,如果您正在从命令行编译dylib(例如开源库),只需将以下内容添加到CFLAGS即可设置安装名称。

-install_name '@rpath'

如果要修改现有二进制文件的安装名称,请使用“install_name_tool”。

另外请确保您的复制文件构建阶段正在将正确的文件复制到应用包中的正确位置。