在Mac OSX上使用Xcode4部署和分发OpenCV应用程序

时间:2011-07-28 08:26:13

标签: macos deployment xcode4 opencv distribution

我正在开发一个OpenCV应用程序,我的问题是如何在非开发机器上安装OpenCV的机器上部署和分发应用程序?

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

感谢

2 个答案:

答案 0 :(得分:4)

这只是部分答案,因为我还没有弄清楚如何使用OpenCV库执行此操作。 (想出来。请参阅下面的更新。)但我已经完成了其他库(SM2DGraphView)。

有三件事需要发生:

  1. 您需要将程序使用的OpenCV库复制到应用程序包中。为此(在Xcode 3中,无论如何),将Copy Files构建阶段添加到目标。将库文件从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目录中找到库。这是我目前陷入困境的地方。

  4. <强>更新

    我找到了正确的install_name_tool命令,让程序看到库(以及查看其他库的库)。关于the Qt page for deploying OS X programs的信息是关键。

    我在程序的Contents / 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)
    

    所以我使用这些命令(在Contents / 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 
    

    然后我切换到Contents / Frameworks目录并使用这些命令告诉库它们的安装位置:

    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在哪里找到core和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的构建阶段。

答案 1 :(得分:1)

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

  • 1)在开发机器上编写应用程序并编写Cmake(不要忘记编写部件以使用OpenCV Cmake)

  • 2)将您的cmake文件和opencv库提供给非开发机器

  • 3)使用CMake脚本构建目标平台上的应用程序,如果你正确编写它可以构建opencv(使用自己的OpenCV Cmake),并构建你的应用程序(用你写的那个)

如果您想更进一步,可以使用CPack创建安装向导或包,以​​便自动化每一个。

Here is the link where you can download it

于连