Embedded Framework与位于软件包外部的版本发生冲突

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

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

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

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

任何帮助,将不胜感激。

最好的祝福,

坦率


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

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

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

otool -L <framework-binary>

这两篇博文解释了这个问题,以及如何正确设置一切:

  • http://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html
  • http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/
  • 此外,如果您从命令行编译dylib(比如说一个开源库),只需将以下内容添加到您的CFLAGS中即可设置安装名称。

    -install_name '@rpath'
    

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

    还要确保您的复制文件构建阶段是将正确的文件复制到应用程序包中的正确位置。

    链接地址: http://www.djcxy.com/p/76407.html

    上一篇: Embedded Framework conflict with version located outside the bundle

    下一篇: Framework builds of Python on Mac OS X