我正在开发一个OpenCV应用程序,我的问题是如何在非开发机器上安装OpenCV的机器上部署和分发应用程序?
我在Mac OS X Lion上使用Xcode4和OpenCV 2.2。
感谢
答案 0 :(得分:4)
这只是部分答案,因为我还没有弄清楚如何使用OpenCV库执行此操作。 (想出来。请参阅下面的更新。)但我已经完成了其他库(SM2DGraphView)。
有三件事需要发生:
您需要将程序使用的OpenCV库复制到应用程序包中。为此(在Xcode 3中,无论如何),将Copy Files构建阶段添加到目标。将库文件从Xcode的文件列表拖到构建阶段。双击“复制文件”项,然后将目标设置为“框架”。
请注意,您需要确保Xcode项目中包含的库是库文件,而不是库文件的符号链接。否则,只会将符号链接复制到您的应用程序包中。
OpenCV框架文件的安装路径需要设置为@executable_path/../Framework
。如果框架是在Xcode中构建的,那么您可以在项目设置中执行此操作。由于OpenCV不是在Xcode中构建的,因此您需要在install_name_tool
命令行程序install_name_tool -id @executable_path/../Frameworks libopencv_imgproc.2.3.1.dylib
之后执行此操作。您应该能够在目标的运行脚本构建阶段进行设置。
可执行文件需要在包的Frameworks
目录中找到库。这是我目前陷入困境的地方。
<强>更新强>
我找到了正确的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
于连