首页 > 技术精文 > C/C++ > 如何让OpenCV工程在没有VS和OpenCV的电脑上运行?
2016
11-09

如何让OpenCV工程在没有VS和OpenCV的电脑上运行?

一、如何让OpenCV工程在没有VS和OpenCV的电脑上运行?
对于这个问题,有两个方法:
1. 使用动态库,讲工程所需的.lib,.dll,.h等和工程.exe一起拷到另一台电脑上运行。
2.使用静态库,讲工程需要的.lib直接编译进.exe中,这时的.exe会比方法1中的大很多,但是此时只需要拷贝一个.exe就可以在另一台电脑上运行了。

二、如何将.lib编译进.exe中?
注意这里的.lib是静态链接库,与动态链接库的引导库.lib不同(动态链接库.dll需要有一个.lib作为引导库)。
将.lib编译进.exe中的第一步是编译OpenCV的静态库.lib。具体的编译方法可以参考:OpenCV - 编译静态OpenCV库(静态库)
生成OpenCV的静态库后,就可以进行第二步了。
1,将相应的静态库配置到工程中。
2,配置属性-〉MFC的使用:设置为 在静态库中使用 MFC
3,配置属性-〉C/C++ -〉代码生成-〉运行库 :设置为 多线程 (/MT)。
在VC(2005以上)中有四种运行库:Multi-threaded(/MT)、Multi-threaded-Debug(/MTD)、Multi- threaded-dll(/MD)、Multi-threaded-debug-dll(/MDD):前两个是静态类型库,提供的函数会被链接到程序中;后两个是动态库,会以动态链接库的形式提供函数给程序调用。
设置完之后,生成的.exe就可以直接使用了。
该部分可参考:OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住

三、补充
1, 其实在安装和编译OpenCV后,其本身已经包含了静态库,在 \build\x86\vc10\staticlib 和\build\x64\vc10\staticlib 路径下,所以本文的使用CMake 编译静态库可以省略掉。
2。按照 二 中的步骤生成.exe运行,发现读取视频不成功。原因是OpenCV的视频解码等处理是基于ffmpeg,而OpenCV仅仅提供了ffmpeg的动态链接库 opencv_ffmpeg***.dll,并没有其静态链接库,即使是使用CMake也不能生成(勾选WITH_FFMPEG也不行)。
所以如果想让视频读取成功,该.exe需要一个.dll支持,即opencv_ffmpeg***.dll。
3。编译ffmpeg静态库的方法可以参考:MinGW下编译ffmpeg静态库给Visual C++使用
按照该方法可以编译出一堆.a文件,即ffmpeg的静态库。这些.a文件的调用具有一定的顺序。
但是我按照文中方法设置后依然无法打开视频。
同时我注意到,OpenCV中也有类似的文件,存放于 \opencv\3rdparty\include\ffmpeg_ 及opencv\3rdparty\lib 中,料想就是ffmpeg的静态库,但是设置后依然无法打开视频。
所以,万不得已,最后的方法还是加入一个.dll支持,即opencv_ffmpeg***.dll。
4。针对文章:OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 中提到的videoInput.lib,我始终都没有找到,料想是版本的不同吧。

最终我们的工程只需要一个.exe 和一个 .dll 就可以在别人的电脑上运行了。

最后编辑:
作者:小企鹅
这个作者貌似有点懒,什么都没有留下。
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复