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

Home / C++ MrLee 2016-11-9 3979

一、如何让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 就可以在别人的电脑上运行了。

本文链接:https://www.it72.com/11197.htm

推荐阅读
最新回复 (0)
返回