QT(MinGW)静态库+Opencv静态编译

网上很少能找到这方面的资料,我也是Google的英文资料,花很长时间才搞定。

第一步,是QT的静态库。这个资料在网上很好找,基本上就是下载源码,自己编译。

QT静态库

主要是花时间比较久。当然也可以下载别人编译好的文件。我在Qt吧里找到了一份,很好用,教程也很详细。


第二步,就是在MinGW下编译Opencv静态库。这个资料也能找到一些。

MinGW编译静态库

一般就是使用OPencv源码和CMake。CMake的时候要注意把BUILD_SHARED_LIBS选项取消,就生成静态库了。这些静态库是.a文件。有两部分,一是在lib文件夹下opencv库,二是在3rdparty下面的第三方库。

注意的是,在CMake过程中,我没有选择WITH_QT选项,因为选择后,opencv的highgui貌似会和QT的一些库相关联,在导入的时候,不知道要另外添加什么东西,一直出错。


第三步,把生成的OPencv静态库导入工程,opencv库和第三方库像平常一样导入就可以了。值得一提的是,有几个库要另外添加,ComCtl32.Lib,Gdi32.Lib,Ole32.Lib,OleAut32.Lib,Uuid.Lib,Vfw32.Lib我的是在这个路径下C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib,当然可能不需要全部添加,因为有的功能没用到。这个是我网上找到的···


第四步,其实做完前三步,已经基本可以用了。但是opencv和Qt有一个第三方库会产生冲突,叫做libjpeg。我是在使用QIcon的时候出现的错误。他们分别使用了不同的版本的libjpeg。opencv使用的v6.2,而QT使用的v8.0。这时候需要使用v8.0版本的libjpeg来编译opencv。在寻找解决方案的过程中,我发现了另外一种更好的方法。使用另一个第三方库libjpeg-turbo,这个库和libjpeg的接口完全一样,而且速度更快,所以可以使用他替代libjpeg。

libjpeg-turbo也是基于libjpeg的,为了解决根本问题,libjpeg-turbo所使用的libjpeg版本必须是V8.0,如果他所提供的静态库不能满足要求的话,可以下载源码,使用CMake自己编译,只需要把libjpeg8.0的选项选中即可。CMake编译libjpeg-turbo的过程,可以参考这里,虽然他是使用VS2010,而我们使用MingW。主要是参考NASM的安装与配置

最后得到libjpeg-turbo的静态库后,可以参考这里,编译Opencv

你可能感兴趣的:(Qt,Qt,Mingw,Opencv,静态编译,libjpeg)