WIN10 + OpenCV3.4 + CUDA8.0 + Cmake3.9.0 + TBB + VS配置/重编译

时间:2024-04-14 19:57:14

写给和我一样的小白。求助和不明白的地方用橙色加以表示

平台:

    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)依据个人所需,下载软件资源

WIN10 + OpenCV3.4 + CUDA8.0 + Cmake3.9.0 + TBB + VS2015配置/重编译

    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.****.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.****.net/poem_qianmo/article/details/19809337

3.CMake设置

    从这里开始终于正式进入重编译阶段.

    1)首先打开CMake,源代码位置为OpenCV源码位置,输出位置为自己设定的位置,进行第一次配置(configure)

    并确定采用VS2015 x64,模式默认就行。我的设定位置为:D:/opencv3_CUDA

WIN10 + OpenCV3.4 + CUDA8.0 + Cmake3.9.0 + TBB + VS2015配置/重编译

    2)仔细浏览整个配置红色的配置选项,如果这一步出现了问题,后面的编译将很有可能不成功

    由于之前安装了CUDA,如果一切配置正确,WITH_CUDA是默认勾选上的,检查其是否被勾选。检查CUDA相关文件夹的路径,版本等情况是否符合自己的要求,依据http://blog.****.net/wolffytom/article/details/49976487,确保BUILD_CUDA_STUBS 没有 被选中。我的配置完情况如下(当然有些功能看自己需求添加或删改):

    WIN10 + OpenCV3.4 + CUDA8.0 + Cmake3.9.0 + TBB + VS2015配置/重编译

WIN10 + OpenCV3.4 + CUDA8.0 + Cmake3.9.0 + TBB + VS2015配置/重编译

    设定完成后可以进行一次配置(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 的信息说明没有问题。

WIN10 + OpenCV3.4 + CUDA8.0 + Cmake3.9.0 + TBB + VS2015配置/重编译

4.写在前面

    在这个时候先别急着点生成(generate)留意一下配置的选项的每个选项的功能,以及配置的输出信息,作为一个之前从来没用过CMake小白才明白CMake到底起着什么样的作用,也可以了解到openCV到底可以与哪些其他的库结合进行编译,或者如何修改定制满足自己需求的库。这个时候特别说明一下,由于之前电脑上安装了Matlab2014a,在利用Cmake配置的时候,默认选上了Matlab相关的选项。但是在之后的VS2015编译过程中总是因为它而报错,具体见:   
    http://answers.opencv.org/question/125939/solved-mexext-issues-compiling-32-with-cuda/
错误的形式为:

    Error: MEXEXT: Unsupported platform. 
如果问题出在Matlab上,检索Cmake表单中的Matlab这项,然后把默认的勾去掉,编译就顺利通过了。

    同样一些莫名其妙的错误全部出现在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警告,调查与编码格式有关,关于这个问题个人没有找到彻底的解决方法。(不要提什么关闭警告忽略警告之类的,强迫症在此谢过了)

WIN10 + OpenCV3.4 + CUDA8.0 + Cmake3.9.0 + TBB + VS2015配置/重编译

    整体编译完成后没有生成失败的项目,那么基本上就应该没有什么太大的问题了。

6.重编译库的运用与测试

    将工程文件夹下的install当成我们下载下来就可以使用的OpenCV库就可以,配置方法相同,只不过是改个路径而已,具体参见

    openCV标准库配置方法:http://blog.****.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