2011-07-28 34 views
7

我正在开发OpenCV应用程序,我的问题是如何在未安装OpenCV的非开发计算机,机器上部署和分发应用程序?在Mac OSX上使用Xcode4部署和分发OpenCV应用程序

我在Mac OS X Lion上使用Xcode4和OpenCV 2.2。

感谢

+0

如果解决方案对您没有帮助,您能否更好地向我们解释您的期望?非常感谢,Julien – jmartel

回答

1

什么,我会建议是使用跨平台编译生成器(如改进autotool)。一个非常常见的是CMake的是不那么容易处理,但也不是那么困难,不仅是常见的一种,它是使用OpenCV中...

  • 1)在开发机器上编写应用程序,并写一个CMake的(不要忘了写一个部分使用OpenCV的CMake的)

  • 2)提供您的CMake文件和OpenCV库到非开发机

  • 3)CMake的脚本构建应用程序在目标平台上,如果你写的是正确的,它可以建立opencv(使用自己的OpenCV Cmake),并构建你的应用程序(与你所写的一样)

如果你想进一步,你可以创建一个安装向导或一个包装与CPack为了自动化everyting。

Here is the link where you can download it

朱利安,

+0

谢谢,我会试试这个。但我想为非技术人员部署应用程序。我读过应该可以将库文件复制到应用程序文件夹中,以便将其分发到没有OpenCV的机器上。但是这对我不起作用...... :( – sn3ek

+0

当然,如果你做一个脚本并使用安装向导,我不明白为什么它不适合非技术人员......至少如果他们知道如何点击下一个,它应该是足够的:p – jmartel

+1

没有必要让最终用户分别安装这些库OS X允许将库嵌入到应用程序包中这是Mac上的“正确”方法。它消除了外部的依赖性,并确保预期的库版本正在被使用。 – SSteve

4

这只是一个局部的答案,因为我还没有想出如何使用OpenCV的库做到这一点。 (想通了,看下面更新)但是我用其他库(SM2DGraphView)做过。

有需要发生的三件事情:

  1. 你需要复制你的程序使用到的应用程序包OpenCV的库。要做到这一点(无论如何Xcode 3),添加一个复制文件构建阶段到您的目标。将库文件从Xcode的文件列表拖到构建阶段。双击“复制文件”项目并将目标设置为“框架”。

    请注意,您需要确保包含在Xcode项目中的库是库文件,而不是库文件的符号链接。否则,只有符号链接将被复制到您的应用程序包中。

  2. OpenCV框架文件的安装路径需要设置为@executable_path/../Framework。如果框架是在Xcode中构建的,您可以在项目设置中执行此操作。由于OpenCV不是在Xcode中构建的,因此您需要在install_name_tool命令行程序:install_name_tool -id @executable_path/../Frameworks libopencv_imgproc.2.3.1.dylib之后执行此操作。您应该能够在目标的运行脚本构建阶段进行设置。

  3. 可执行文件需要在软件包的Frameworks目录中找到该库。这是我目前卡住的地方。

更新

我找到了正确的install_name_tool命令来获取程序,看看图书馆(和图书馆看到其他图书馆)。关于the Qt page for deploying OS X programs的信息是关键。

我在我的程序的内容/ MacOS的目录下的可执行文件运行otool -L,看到这个[去除不相关的线]:

lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1) 
lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1) 
lib/libopencv_highgui.2.3.dylib (compatibility version 2.3.0, current version 2.3.1) 

所以我用这些命令(而在内容/ MacOS的目录)让程序在正确的地方去寻找库:

install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib CocoaCVTest 
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib CocoaCVTest 
install_name_tool -change lib/libopencv_highgui.2.3.dylib @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib CocoaCVTest 

然后,我改变的内容/框架目录和使用这些命令,告诉他们在那里安装的库:

install_name_tool -id @executable_path/../Frameworks/libopencv_core.2.3.1.dylib libopencv_core.2.3.1.dylib 
install_name_tool -id @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib libopencv_imgproc.2.3.1.dylib 
install_name_tool -id @executable_path/../Frameworks/libopencv_highgui.2.3.1.dylib libopencv_highgui.2.3.1.dylib 

现在imgproc库需要被告知在哪里可以找到核心库和highgui需要被告知在哪里可以找到核心和imgproc:

install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib libopencv_imgproc.2.3.1.dylib 
install_name_tool -change lib/libopencv_core.2.3.dylib @executable_path/../Frameworks/libopencv_core.2.3.1.dylib libopencv_highgui.2.3.1.dylib 
install_name_tool -change lib/libopencv_imgproc.2.3.dylib @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib libopencv_highgui.2.3.1.dylib 

我仍然在运行到一个问题,即highgui正在/ opt/local/bin中寻找很多库,但我相当确信OpenCV问题的一部分已经解决。现在我只需要将所有这些命令放入Xcode的构建阶段即可。

相关问题