VS2015+CMake编译OpenCV2.4.13静态库

之前用CMake自己编译过OpenCV2.4.13的动态库,现在项目要求要用静态库,没办法只能重新来一遍。


OpenCV已经提供编译好的库了,我们为什么还要自己编译?主要还是因为官方提供的版本由于要适配所有人的需求,所以只能是标准版本,可能和你自己需要用的某些库并不匹配,这个时候就很容易出错了。而且还有一个很方便的地方就是,自己编译一次,在调试的时候是可以追踪到源代码的,你如果用官方提供的库就不行了。


静态库和动态库的编译过程完全相同,只有在cmake配置的时候有一个小地方不一样而已,后面会说。好了,开始吧。


工具版本:

VS:Visual Studio Community 2015 中文版

CMake:cmake-3.9.1-win32-x86

OpenCV:2.4.13源代码


Step 1:CMake 配置

注:CMake在安装的时候记得勾选“Add cmake into PATH for all users.” 这样省去后面配置环境变量的麻烦。

第一步:安装完成后,打开CMake,最上面的两个框这样配置:

Where is the source code: 选择你的opencv源代码所在的文件夹,比如我的D:/OpenCV/Sources/opencv2413sources

Where to build the binaries:选择要存放编译之后的文件的文件夹,新建一个比如D:/OpenCV/OpenCV2413/static

第二步:然后点击左下角的Configure按钮,这个时候会弹出一个框让你选择要使用的编译器版本:VS2015+CMake编译OpenCV2.4.13静态库_第1张图片

这个地方一定一定一定要选择正确,否则下面的步骤就没法进行了,全部都是错误。总而言之,你电脑上装了什么版本的VS,就用什么版本,后面带Win64的是64位的意思,不带这个的就是32位,我们一般都是生成32位的,所以就选择Visual Studio 14 2015就行了。如果你这个地方选错了,会出现下面这样的错误:

VS2015+CMake编译OpenCV2.4.13静态库_第2张图片

出现这种错误可能的情况有:

1. 没搞清楚VS版本的命名方式,没仔细看选错了版本。比如Visual Studio 14实际上指的是Visual Studio 2015,而Visual Studio 15指的是Visual Studio 2017,你如果电脑上装的是VS2015,那要选择Visual Studio 14 2015这个选项才对。为啥VS两套命名方式,其实20XX这种是发布版本的年份,也就是VS的正式版本名称,而所谓的14,15这种是VS的内部版本号。

2. 所选择的路径中包含中文,CMake不识别中文。其实不管是CMake还是其他的也好,最好这种和编程相关的东西全部不要用中文,一定一定换成英文,可以省去很多麻烦。

3. 电脑上安装了其他版本比如64位的CUDA等别的东西,而你要生成的是32位的OpenCV库,所以这里配置的时候就出错了。我在第二次进行编译的时候就出现了这个错误,因为距离第一次使用cmake编译已经过去了半年多,这期间我因为用深度学习的库所以安装了不少东西,比如CUDA,而我电脑是64位的,所以这些都是64位版本,因此在这里配置的时候就一直提示这个错误。如果你也出现这个错误,不用担心,第一次配置完之后出现上面那么多红色的东西,找到WITH_CUDA和WITH_CUFFT这个选项,把前面的勾去掉,再第二次点击Configure就不会出错了。

VS2015+CMake编译OpenCV2.4.13静态库_第3张图片


第三步:好了,如果你上面的步骤都没有出错,那么第一次点击Configure之后就会出现很多很多红色背景上的选项,由于我们要生成静态库,所以要找到其中的BUILD_SHARED_LIBS这个选项,把前面的勾去掉即可。【如果是要生成动态OpenCV库,那就勾选这个选项】然后再点击一次Configure即可,会看到左下角出现“Configuring done”的提示,这就表示配置没问题了。

第四步:然后再点击“Generate”按钮即可。如果成功的话会在左下角看到“Generate done”的提示。

如果到了这一步,就说明CMake的使命已经完成了,你可以关闭CMake了。然后打开我们刚才指定的那个生成目录。


Step 2:使用VS2015编译OpenCV

打开我们指定的生成目录可以看到一个叫做OpenCV.sln的文件:

VS2015+CMake编译OpenCV2.4.13静态库_第4张图片

可以看到这就是VS的解决方案文件,那个图标的左上角是14,这代表我们生成的确实是VS2015版本的,双击打开它,可以看到70个左右的项目:

VS2015+CMake编译OpenCV2.4.13静态库_第5张图片


注:一般库都是分Debug版本和Release版本的,所以你最好也是两个版本都生成一下,便于不同情况下使用。


首先选择Debug,然后选择“生成-->生成解决方案”,耐心等待即可。

VS2015+CMake编译OpenCV2.4.13静态库_第6张图片


当然你完全也可以选择用F5或者点击右边的绿色三角来运行,这都是可以的。但是如果用这种方式来运行,在所有的库生成之后会弹出一个小错误:

VS2015+CMake编译OpenCV2.4.13静态库_第7张图片

为什么?因为ALL_BUILD不是一个可执行的项目啊,而你选择了用调试运行的方式来执行编译,最后要执行,结果ALL_BUILD无法执行,所以提示这个错误了。不过你可以完全无视这个错误,因为不会有任何一丁点的影响。为了避免出现这个烦人的错误,还是建议选择“生成解决方案”这种方式来运行编译,我们的目的是生成库,选择“生成”不是再自然不过的了么?


好了,Debug版本的生成之后,切换成Release同样执行一遍上面的操作,耐心等待生成即可。


等到全部都生成完之后,还有一个步骤一定要做,否则你不知道去哪里找生成的lib文件和所有include头文件。

在解决方案管理器里面看到CMakeTargets下面的ALL_BUILD和INSTALL了吗?对,选择INSTALL项目,然后右键点击,选择“生成”:

VS2015+CMake编译OpenCV2.4.13静态库_第8张图片

VS2015+CMake编译OpenCV2.4.13静态库_第9张图片

然后耐心等待一会就行。同样你需要在Debug下面执行一次,然后切换到Release模式下再执行一次。


这个操作其实是为了把生成的lib(动态库的话就是dll和lib)和头文件都整合到一起,放在了你刚才打开OpenCV.sln这个目录下的install文件夹内:

VS2015+CMake编译OpenCV2.4.13静态库_第10张图片

include里面就是opencv和opencv2两个文件夹,是不是很熟悉?

x86里面就是vc14\bin和vc14\staticlib,是不是很熟悉?

不过我们是要生成静态库,所以其实这里bin目录下面的东西没什么用,我们只需要vc14\staticlib下面的lib库文件就行了。

VS2015+CMake编译OpenCV2.4.13静态库_第11张图片

为了使用方便,建议把Debug版本(就是后面带小写字母d的那个文件)和Release版本的库分开存放在Debug和Release两个文件夹中。


好了,到此我们需要的OpenCV库就生成成功了,要使用的话只需要install这一个文件夹内的内容就行了,其他的你嫌烦都可以删掉了。


你可能感兴趣的:(OpenCV,VS使用,图像处理)