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

sn3*_*3ek 7 deployment macos opencv distribution xcode4

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

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

谢谢

SSt*_*eve 5

这只是部分答案,因为我还没有弄清楚如何使用 OpenCV 库来做到这一点。(想通了。见下面的更新。)但我已经用其他库(SM2DGraphView)完成了。

有三件事需要发生:

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

    请注意,您需要确保包含在 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 命令来让程序查看库(以及查看其他库的库)。上的信息部署OS X程序Qt的页面是关键。

我运行otool -L了我程序的 Contents/MacOS 目录中的可执行文件,看到了这个[删除了不相关的行]:

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)
Run Code Online (Sandbox Code Playgroud)

所以我使用这些命令(在 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 
Run Code Online (Sandbox Code Playgroud)

然后我切换到 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
Run Code Online (Sandbox Code Playgroud)

现在需要告诉 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 
Run Code Online (Sandbox Code Playgroud)

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


jma*_*tel 1

我建议是使用跨平台编译构建器(如改进的自动工具)。一个很常见的就是CMake,虽然不太好办但也不那么难,不仅常见,OpenCV也用它……

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

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

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

如果您想更进一步,您可以创建安装向导或使用 CPack 的包来自动化一切操作。

这是您可以下载的链接

朱利安,