C++ 尝试将动态库与C++;Xcode项目,但它们';你没有得到正确的参考

C++ 尝试将动态库与C++;Xcode项目,但它们';你没有得到正确的参考,c++,xcode,opencv,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/

我刚刚开始在Xcode中工作,并试图让我的(C++)命令行应用程序(Mac OS X目标)包含自己的OpenCV动态库,这样我就可以部署到其他人的计算机上,并且它可以正确地找到它们(他们的计算机不需要安装OpenCV)。但除了他们住在我的电脑上(/opt/local/lib),它什么地方都找不到

当可执行文件在另一个系统上运行时,会抛出如下错误:

dyld:未加载库:/opt/local/lib/libopencv_core.2.3.dylib 引用自:/Users/editc/Desktop/edge\u display/edge\u display原因: 找不到图像

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

如何让它在应用程序自己的目录中查找?将“/”添加到库搜索路径似乎没有任何作用

几次搜索表明它应该查看其应用程序包的Frameworks/目录,但由于某种原因它没有生成.app包,因此即使我更改安装目录并添加如中所述的文件复制步骤,因为我没有应用程序包,所以我也没有Frameworks目录。因此,如果没有应用程序包,这项技术就不起作用。(我甚至不知道在什么情况下会生成应用程序包。)


我的项目是,供你参考。有人能帮忙吗?在Xcode和Mac OS X的开发中,我还没有完全了解,所以如果这个问题似乎是新问题,请提前道歉。

在项目设置中,您可以使用@executable\u path来找到正确的位置。希望有帮助


您也可以尝试自己从代码中加载库,我想。

这在一开始总是很难理解

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

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

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

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

  • 从“边缘显示”文件夹中删除动态库文件(和链接)
  • 删除复制库文件的复制文件生成阶段
  • 删除
    @executable\u path/./Frameworks
    安装目录设置
  • 从Xcode项目中的
    OpenCV Frameworks
    文件夹中删除所有内容
  • 选择目标,选择构建阶段,展开
    linkbinary With Libraries
  • 单击加号按钮,单击添加其他…,键入“/opt/local/lib”,选择
    libopencv_core.dylib
    (注意,我没有选择具有版本号的文件)
  • libopencv\u highgui.dylib
    libopencv\u imgproc.dylib
    重复上述步骤(这些是您的项目所需的唯一库)
  • 将部署目标设置为OS X 10.6,因为我正在使用它
  • 单击“运行”并获取以下内容:
  • 我的系统与您的系统稍有不同,因为我的OpenCV库安装在/usr/local/lib中,但您已经在项目的标题搜索路径中安装了/opt/local/include,所以您应该可以


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

    非常感谢您的帮助!如果我错了,请纠正我的错误,但是如果我从/opt/local/lib添加库,然后将可执行文件分发给没有安装OpenCV的人,它不会因为找不到这些库而引发错误吗?用于引导它在可执行文件目录或任何其他任意目录中查找的设置位于何处?谢谢对你说得对。但你必须区分命令行应用和Cocoa应用。使用Cocoa应用程序,您可以嵌入dylibs。您必须告诉应用程序在何处查找库,还必须告诉库在何处查找它们自己。使用命令行应用程序,我相信你必须像使用iPhone程序那样构建和嵌入静态库,但我没有这样做,所以我不知道细节。啊,太好了。谢谢你的解释;我真的很感激。嗨,伙计们,我知道这可能太晚了,但你们知道是否可以只使用.ipa包含动态库(以防你们并没有源代码,无法访问项目设置)。也许要将一些设置设置为info.plist?谢谢