2009-10-25 101 views
21

我是XCode新手。我正在尝试关注these instructions。显然我错过了一些东西,因为虽然我可以看到我想要的框架已被复制到应用程序包中,但我无法引用它。XCode中的应用程序包框架

当我比我的其他机器启动的应用程序(或者,如果我从/库/框架/删除OpenCV的),我收到以下错误:

Dyld Error Message: Library not loaded: /Users/david/Library/Frameworks/OpenCV.framework/Versions/A/OpenCV Referenced from: /Users/g/Demo/Slates/ClipSplitter/build/Release/ClipSplitter.app/Contents/MacOS/ClipSplitter Reason: image not found

没有用户“大卫”在我系统,如果这有什么区别。这也是从互联网下载的预构建的OpenCV。 (Here’s a screenshot of the project按照注释中的要求。)

+0

它在应用程序包内部的位置? – 2009-10-25 17:43:25

+0

内容/框架/ OpenCV。框架 – 2009-10-25 18:00:21

+0

我会说你的项目窗口的屏幕截图与相关的目标完全展开。 – 2009-10-25 19:36:28

回答

29

当OpenCV.framework被构建时,它已被配置为使用/Users/david/Library/Frameworks/的安装路径。

由于您想将该库用作私有框架(安装在应用程序包装中的ClipSplitter.app/Contents/Frameworks/OpenCV.framework),因此您必须更改其安装路径。这可以使用终端容易地完成如下:

$ install_name_tool -id @executable_path/../Frameworks/OpenCV.framework/OpenCV <your_path>/OpenCV.framework/OpenCV 

当然,你必须调整最后一个参数的路径。

现在,当链接您的应用程序时,您的修改后的框架会告诉链接程序dyld必须在应用程序的应用程序包装中(在ClipSplitter.app/Contents/Frameworks目录中)搜索OpenCV.framework。

现在您必须将OpenCV.framework复制到您的应用程序包装中。通过添加复制文件构建阶段,您可以将其作为构建过程的一部分:右键单击目标,选择添加 - >新建构造阶段 - >新建复制文件构建阶段。从弹出的“目标”中选择“框架”并关闭对话框。

您的目标现在将包含一个新阶段,您可以通过从Xcode窗口左侧的Project Navigator拖动图标来添加OpenCV.framework。请注意,Xcode不允许你使用'+'按钮添加文件夹到复制文件阶段,所以为了复制框架,你必须拖动&。

+2

这几乎完全正确。我实际上必须运行的命令是:$ install_name_tool -id @executable_path /../ Frameworks/OpenCV.framework/OpenCV /OpenCV.framework/OpenCV但这足以让我到那里。谢谢!!!! – 2009-11-01 15:36:02

+0

哎呀,对。如果你不尝试你正在输入的内容,会发生这种情况。对困惑感到抱歉。 – 2009-11-01 16:23:56

+0

如果您将多个框架安装到安装路径_that依赖于each_,虽然这不起作用。您还需要在xcode应用程序中设置运行路径搜索路径,以便在@loader_path /../ Frameworks中进行搜索。 我发现这个解释真的很有帮助:http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/ – NHDaly 2013-08-03 04:21:43

6

你需要构建设置“安装目录”设置为@executable_path/../Frameworks

看到有关https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html

问候

+3

您至少应该提到,在构建框架时必须应用此设置,而不是链接框架的应用程序。 – 2009-10-31 20:44:36

+0

是的,我确定这是一个很好的建议,除非我没有构建OpenCV框架,我下载了它。 – 2009-11-01 15:38:12

+1

我错过了最后一句话,尼古拉的答案在这种情况下更合适。不过,我不确定为什么宁愿花时间修复破解的预构建开源库,而不是正确构建它们。 – 2009-11-02 11:41:52

2

使用嵌入在你的应用程序中捆绑私人框架的Xcode 5章,你可以使用应用程序目标的Build Phases面板来促进此操作。

该面板的默认外观是

按下下方复制文件的“+”按钮,您可以添加框架,将在您的应用程序包被复制到框架文件。

现在,当您构建时,您的框架将被复制到您的包中。

+1

图像已死。重新上传? – pkamb 2016-09-12 22:59:49