试图将动态库与C ++ Xcode项目一起嵌入,但它们没有被正确引用

时间:2011-12-11 08:07:49

标签: c++ xcode opencv

我刚刚开始在Xcode中工作并试图让我的(C ++)命令行应用程序(Mac OS X目标)包含自己的OpenCV动态库,以便我可以部署到其他人的计算机上并且它'我们会正确找到它们(没有他们的计算机需要安装OpenCV)。但除了他们在我的电脑上的位置(/ opt / local / lib)之外,它并没有找到任何地方。

当可执行文件在另一个系统上运行时,它会抛出这样的错误:

  

dyld:未加载库:/opt/local/lib/libopencv_core.2.3.dylib   引自:/ Users / editc / Desktop / edge_display / edge_display原因:   图片未找到

(请注意,尽管libopencv_core.2.3.dylib与可执行文件包含在同一目录中,但这仍然存在。)

如何让它查看应用程序自己的目录?将“./”添加到库搜索路径似乎什么都不做。

有几个搜索表明它应该查看其应用程序包的Frameworks /目录,但由于某种原因它没有生成.app包,所以即使我更改了安装目录并添加了如下所述的文件复制步骤this thread,因为我没有应用包,所以我没有Frameworks目录。所以没有应用程序包,这种技术不起作用。 (我不确定我是否理解应用程序包在什么条件下生成。)

我的项目是here,供您参考。有人可以帮忙吗?我一般都在Xcode和Mac OS X开发中沾沾自喜,所以如果这个问题看起来很新,请提前道歉。

2 个答案:

答案 0 :(得分:2)

这个东西一开始很难弄明白。

您不需要将框架复制到Frameworks目录中,因为您的项目是命令行应用程序。在制作Cocoa应用程序时,您只有一个应用程序包。即使在这种情况下,如果您要将应用程序分发给未安装OpenCV的用户,您只需要将框架复制到Frameworks目录中。

  

请注意,尽管libopencv_core.2.3.dylib是这样的   包含在与可执行文件相同的目录中。

不要将库文件复制到可执行文件的文件夹中。只需将其链接到/ opt / local / lib

中的文件即可

我下载了你的项目并且能够让它运行。这就是我所做的(使用Xcode 4):

  1. 从Edge Display文件夹中删除dylib文件(和链接)
  2. 删除复制库文件的“复制文件”构建阶段
  3. 删除@executable_path/../Frameworks安装目录设置
  4. 从Xcode项目的OpenCV Frameworks文件夹中删除所有内容
  5. 选择目标,选择Build Phases,展开Link Binary With Libraries
  6. 点击加号按钮,点击添加其他...,输入" / opt / local / lib",选择libopencv_core.dylib(注意我没有选择带有版本号的文件)
  7. 重复libopencv_highgui.dyliblibopencv_imgproc.dylib(这是您项目需要的唯一库)
  8. 将部署目标设置为OS X 10.6,因为我使用的是
  9. 点击“运行”并获取此信息:
  10. My beautiful edge-detected face

    我的系统与您的系统略有不同,因为我的OpenCV库安装在/ usr / local / lib中,但您已经在项目的标题搜索路径中有/ opt / local / include,所以你应该没问题

    the OpenCV Wiki上的OS X命令行项目中有一些使用OpenCV库的说明,但它们是为Xcode 3编写的。我将尝试为Xcode添加一些更新的指令4。

答案 1 :(得分:0)

在项目设置中,您可以使用@executable_path来到达正确的位置。希望有所帮助。

您也可以尝试自己从代码中加载库..