写给和我一样的小白。求助和不明白的地方用橙色加以表示
平台:
Windows 10.0.15063
CMake: 3.9.0 下载地址:https://cmake.org/download/
显卡:
NVIDIA GeForce GT 755M (笔记本)
软件/库资源:
CUDA 8.0 GA1 下载地址:https://developer.nvidia.com/cuda-80-download-archive
OpenCV3.4.1 下载地址:https://opencv.org/opencv-3-4-1.html
TBB4.4 下载地址:https://github.com/01org/tbb/releases
VS2015 community (默认已有)
编译器:
VS2015 Win64 (默认已有)
1.安装CUDA8.0
1)依据个人所需,下载软件资源
2)确保自己电脑的GPU支持CUDA,详细资料咨询
https://www.geforce.com/hardware/technology/cuda/supported-gpus?field_gpu_type_value=All&page=2
3)确保自己电脑有相应的显卡驱动程序(此条为网上所云,但是好像安装CUDA的时候似乎也会给装?)
4)安装CUDA 个人采用精简安装于默认路径,建议还是高级选项里确认一下什么安装了什么没有安装
5)为了今后的方便,按照网上的流程对CUDA进行了配置,并运行了一个简单的例程,配置流程参照(应该可以不用配置)
https://yq.aliyun.com/articles/71287
http://blog.csdn.net/lvfeiya/article/details/53325784
运行例程为第一篇文章里所说的nbody
2.安装TBB和OpenCV3.4库和CMake
与其说安装,不如说解压,库下载并解压到指定位置。CMake下载后顺序安装即可。
我的TBB解压路径为:D:\tbb2018_20171205oss
并添加系统环境变量 D:\tbb2018_20171205oss\bin\intel64\vc14
其中VC14代表是VS2015 intel64代表是应用于64位的系统
我的OpenCV解压路径为:D:\openCV3.4.1\opencv(之前有openCV2了用于区别)这个时候OpenCV库已经可以在VS里使用了,配置方法具体参照:
http://blog.csdn.net/poem_qianmo/article/details/19809337
3.CMake设置
从这里开始终于正式进入重编译阶段.
1)首先打开CMake,源代码位置为OpenCV源码位置,输出位置为自己设定的位置,进行第一次配置(configure)
并确定采用VS2015 x64,模式默认就行。我的设定位置为:D:/opencv3_CUDA
2)仔细浏览整个配置红色的配置选项,如果这一步出现了问题,后面的编译将很有可能不成功。
由于之前安装了CUDA,如果一切配置正确,WITH_CUDA是默认勾选上的,检查其是否被勾选。检查CUDA相关文件夹的路径,版本等情况是否符合自己的要求,依据http://blog.csdn.net/wolffytom/article/details/49976487,确保BUILD_CUDA_STUBS 没有 被选中。我的配置完情况如下(当然有些功能看自己需求添加或删改):
设定完成后可以进行一次配置(configure)
之前解压了TBB,但是我这里没有为WITH_TBB自动画勾,就需要自己勾选上。这时候点击一次配置(configure),会让你选择TBB相关文件的路径, 对应我之前的TBB解压路径 填写:
TBB_ENV_INCLUDE D:/tbb2018_20171205oss/include
TBB_ENV_LIB D:/tbb2018_20171205oss/lib/intel64/vc14/tbb.lib
TBB_ENV_LIB_DEBUG D:/tbb2018_20171205oss/lib/intel64/vc14/tbb_debug.lib
以上这几个不要填写错误仔细检查,否则编译时会提示编译错误 XXX.lib打不开 等(亲身体会orz)
TBB_DIR这个选项我填写了已经解压的文件夹但是在配置之后会消失,并不影响之后的编译工作,还希望能有个明白的说法。
填写完成后再点击一次配置(configure),我这里是自动填上的,检查:
TBB_VER_FILE D:/tbb2018_20171205oss/include/tbb/tbb_stddef.h
最后点击一次配置(configure)表单全白,出现configure done 的信息说明没有问题。
4.写在前面
在这个时候先别急着点生成(generate)留意一下配置的选项的每个选项的功能,以及配置的输出信息,作为一个之前从来没用过CMake小白才明白CMake到底起着什么样的作用,也可以了解到openCV到底可以与哪些其他的库结合进行编译,或者如何修改定制满足自己需求的库。这个时候特别说明一下,由于之前电脑上安装了Matlab2014a,在利用Cmake配置的时候,默认选上了Matlab相关的选项。但是在之后的VS2015编译过程中总是因为它而报错,具体见:
http://answers.opencv.org/question/125939/solved-mexext-issues-compiling-32-with-cuda/
错误的形式为:
同样一些莫名其妙的错误全部出现在opencv_testXXX和opencv_perfXXX中,个人猜测这些应该和最后的生成库没有太大的关系(见名字就知道是性能测试所用)。如果和我一样有强迫症不想看见红叉叉,估计可以在配置Cmake的时候尝试着不勾选BULID_PERF_TEST,但是,我没有这么做,在接下来的生成install中也没有产生其他问题。
最后,如果一切就绪,点击Generate生成VS2015工程文件。
5.VS2015工程编译
进入生成的工程文件夹,点击openCV.sln进入工程,里面包含刚刚通过Cmake的相应选项产生的未编译的工程,譬如在Cmake里勾选了BUILD_CORE,里面就会有opencv_core这个工程。同样由于我们选择了CUDA,里面就会有很多关于CUDA的工程文件。这些工程生成的lib就是和我们从网上下载下来的lib之间的主要区别。
首先检查自己的编译器是否是和Cmake选择的一致(譬如是64位不是32位),确定是debug版本还是release版本(如下图),依照http://www.cnblogs.com/asmer-stone/p/5530868.html提示的方法,可以先试一试关键的几个工程生成是否能够通过,譬如opencv_core, opencv_cudabgsegm等等,如果出现问题可以节省时间去分析和查找。大概是openCV的版本不同,Cmake配置不同,工程数量以及后续出来的lib个数也不太一样。不知道会不会在之后的使用过程中产生问题。
如果上述的一些关键工程编译没有什么问题,那么就可以直接生成all_build 和 install工程了,工程名右键->生成。
接下来就可以去干干别的事情了,譬如睡个午觉喝喝茶。。。估计整个的编译过程在2到3小时。
在编译的过程中我的电脑产生了大量的C4819警告,调查与编码格式有关,关于这个问题个人没有找到彻底的解决方法。
整体编译完成后没有生成失败的项目,那么基本上就应该没有什么太大的问题了。
6.重编译库的运用与测试
将工程文件夹下的install当成我们下载下来就可以使用的OpenCV库就可以,配置方法相同,只不过是改个路径而已,具体参见
openCV标准库配置方法:http://blog.csdn.net/poem_qianmo/article/details/19809337
自编译库的配置方法:http://www.cnblogs.com/asmer-stone/p/5530868.html 参见其中的后半部分 包含测试程序等
最后,针对那么多lib文件需要添加到链接器中的问题,也没必要大费周章的写个python脚本,DOS就可以解决了:
https://jingyan.baidu.com/article/ed15cb1b7220061be36981fa.html
7.参考资料
所有上述引用的网页
http://www.cnblogs.com/freedomshe/archive/2013/01/11/win7_vs2012_opencv_rebuild.html