openCV with CUDA编译:乱码错误+no such file

前言

关于OpenCV编译教程非常多,个人参考的链接如下:
https://blog.csdn.net/stjuliet/article/details/84640094
基本上按照步骤一步一步下来没有什么问题,这个流程经过很多小伙伴的验证也是可行的。但是在cmake完成,使用VS进行build的时候,本人就出现了一大堆错误,直接导致编译失败。
查找输出,发现第一个错误是在nvcc编译.cu文件的过程中,输出的信息全部都是”锟斤拷”之类的乱码,其中大部分是warning,只有一个是error,是乱码+No such file。
本人编译的版本openCV4.2.0 + CUDA9.2(10.2也试过) + VS2017 + CMAKE3.15。

探讨

由于VS输出报错中,主要error是no such file,个人查找了相应位置,发现项目中C/C++附加包含库目录是有相应头文件的,而且修改源码,输出#include时也有相应提示,所以此时我认为库目录路径应该是有的,那问题就是出在乱码上
在这里插入图片描述
此时查阅了一些其他人遇到的问题,如https://blog.csdn.net/Angle_Cal/article/details/79376233,提出的问题是因为MSVC编译器编译出现乱码,并就此更改了各个编译器地址但都没用。
在与该博客作者探讨了一番后无果。据说这是CUDA以往的bug,在新版本中已经修复了,所以也没见身边小伙伴遇到过。

一番折腾(特别是阅读cmake文档。)感觉越走越偏。换个思路,既然是编译.cu文件出现的问题,那我自己编译该.cu文件。于是通过命令行nvcc手动编译.cu文件,此时完全没有乱码!但还是报了no such file的错误。然后通过指定参数–include-path添加库路径,这时编译通过了!
就此我单独拿了一个子项目出来就行编译,然后在VC++目录中添加包含目录,这时同样成功了!

解决

经过上面的发现,那显然是nvcc编译.cu的时候真的找不到库的头文件(虽然在C/C++附加包含目录中有)。
解决方案就是在cmake时,手动指定nvcc的参数,设置–include-path
在这里插入图片描述
这时本人的设置:

--include-path F:/library/vs/OPenCV_CUDA/build/3rdparty/ippicv/ippicv_win/icv/include,F:/library/vs/OPenCV_CUDA/build/3rdparty/ippicv/ippicv_win/iw/include,F:/library/vs/OPenCV_CUDA/opencv-4.2.0/modules/core/src,F:/library/vs/OPenCV_CUDA/opencv-4.2.0/modules/core/include,F:/library/vs/OPenCV_CUDA/build/modules/core,F:/library/vs/OPenCV_CUDA/opencv_contrib-4.2.0/modules/cudev/include,F:/library/vs/OPenCV_CUDA/opencv-4.2.0/3rdparty/zlib,F:/library/vs/OPenCV_CUDA/build/3rdparty/zlib,F:/library/vs/OPenCV_CUDA/opencv-4.2.0/3rdparty/include/opencl/1.2,F:/library/vs/OPenCV_CUDA/opencv-4.2.0/3rdparty/ittnotify/include,F:/library/vs/OPenCV_CUDA/build,F:/tools/CUDA10.2/CUDA_Development/include

至于上面的路径怎么找,本人是找了其中一个项目,复制了C/C++附加包含库路径(可能有遗漏)。编译后错误大量减少,碰到少量错误再一个一个添加其路径即可。

最后

最终是编译成功了。反思了一下,一个是被VS一堆乱码给误导了。就这个问题,明明我活动代码页一直设置是Unicode,而且我手动输出调试信息或者在命令行cmd编译.cu都是正常的。可能跟cmake中一些设置有关。
另外一个是cmake之后库目录默认放在每个项目C/C++的附加包含目录而不是VC++包含目录,原因是前者是对当前项目生效的,而后者是对全局生效的。但本人就是因为这一点而编译不通过.cu文件(毕竟人家都说了是C/C++的设置)。但所有其他人都从未遇到该问题,本人甚是不解。
以上便是本次“解谜过程”,由于拖了很久才进行记录总结,很多截图已无法获取,对阅读者致以歉意。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值