vs配置opencv和libtorch(2.2.2)(cuda12.0)


网上很多教程刚开始都让切release模式,博主最初因为没找到哪里切换,所以用的默认的debug模式。他们配置方法一样,其区别在于

  • Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息

  • Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。(调试信息可在单独的PDB文件中生成)。 Release模式下生成一个文件.exe或.dll文件。

具体有兴趣的可以进一步查阅资料。
在这里插入图片描述
图里可以看到debug模式下代码正常,切换到release之后如图:
在这里插入图片描述
因为release模式下,opencv并未配置。所以这里博主重新配置一遍release模式下的过程。

主要是一下三个操作步骤:
右键项目点击【属性】进入一下页面:
在这里插入图片描述

一 、opencv配置

1.1、opencv下载

下载地址:opencv
在这里插入图片描述

这里博主下载的是【Windows】版本,【Sources】版本是源码安装,可以参考博主另一篇博文win下C++部署深度学习模型之clion配置pytorch+opencv教程记录

1.2、【VC++目录→包含目录】

点击编辑
在这里插入图片描述
【新行】→【…】
在这里插入图片描述
在这里插入图片描述
定位到D:\opencv-4.8.0-windows\opencv\build\include后点击确定。
在这里插入图片描述

添加玩之后如图所示:
在这里插入图片描述

1.3、【VC++目录→库目录】

操作和1中类似,区别在于添加的目录地址不一样。
在这里插入图片描述

定位到D:\opencv-4.8.0-windows\opencv\build\x64\vc16\lib点击确定。
在这里插入图片描述

1.4、【链接器→输入→附加依赖项】

在这里插入图片描述
需要添加opencv_world480.lib文件的绝对路径地址即D:\opencv-4.8.0-windows\opencv\build\x64\vc16\lib\opencv_world480.lib
。此处大家根据自己的实际路径填写**\opencv\build\x64\vc16\lib\opencv_world480.lib

划重点
图里有两个类似的文件opencv_world480.libopencv_world480d.lib。网上很多教程,有的这里添加的是前者有的是后者。博主被这个坑惨了,这里分享给大家避免踩雷。下图可以看到博主此时是在release模式下,所以对应选择opencv_world480.lib;如果是debug,则应该选择opencv_world480d.lib。否则不匹配将会发生如下错误:
在这里插入图片描述
这个问题如果排查起来很折磨人!
正确配置好后如下所示:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.5、测试运行

配置完成后点击项目下【源文件】,右键【添加】→【信件项】后按下图所示新建一个cpp文件,自定义取名。
在这里插入图片描述
输入以下测试代码:

#include <opencv2\opencv.hpp> 
#include <iostream>

using namespace std;   // c++标准库中所有标识符都被定义于一个名为std的namespace中
using namespace cv;

int main()
{
    //这里给出自定义目录图片目录
	Mat img = imread("E:/6.jpg");
	if (img.empty())
	{
		cout << "该图片读取有问题" << endl;
		return 0;
	}
	imshow("test", img);
	waitKey(0);
	return 0;
}

再点击下图任一按钮即可运行程序。
在这里插入图片描述

在这里插入图片描述

二、libtorch配置

2.1、 libtorch下载

下载地址:libtorch官方下载地址
在这里插入图片描述
注意上图中标注的几项,cuda版本向下兼容,选择适配自己环境的release版本进行下载。

2.2、【VC++目录→包含目录】

此处同理opencv配置,定位到2.1中下载的D:\libtorch-cu121\libtorch\include和“D:\libtorch-cu121\libtorch\include\torch\csrc\api\include”目录进行添加。

在这里插入图片描述

添加之后如图所示:
在这里插入图片描述

2.3、【VC++目录→库目录】

同理opencv 【2.3】定位到D:\libtorch-cu121\libtorch\lib进行添加。

在这里插入图片描述

2.4、【链接器→输入→附加依赖项】

定位到下图所示目录:
在这里插入图片描述

有两种方式可以添加:
方法一

将目录D:\libtorch-cu121\libtorch\lib路径下的所有lib文件添加到该位置,不同版本有不同的.lib文件,这里建议可以将其先存为一个TXT文件,方便后续出错后修改。
在这里插入图片描述
在这里插入图片描述

方法二
给出绝对路径地址+“*.lib”即可。
博主这里即为:D:\libtorch-cu121\libtorch\lib\*.lib在这里插入图片描述

2.5、【配置属性】→【调试】→【环境】

按照上述配置后,进行测试,发生报错:“无法定位程序输入点?check_range@Symlnt@c10@@ .exe或是.dll”

解决方法:在调试——环境中设置lib文件夹里的DLL文件的环境变量。
编辑【环境】为PATH=D:\libtorch-cu121\libtorch\lib;%PATH%
在这里插入图片描述

2.6、试运行

输入以下代码进行测试:

#include <iostream>
#include <torch/torch.h>
#include<torch/script.h>
using namespace std;


int main()
{
	cout << "cuda是否可用:" << torch::cuda::is_available() << endl;
	cout << "cudnn是否可用:" << torch::cuda::cudnn_is_available() << endl;
	cout << torch::cuda::device_count() << endl;


	torch::Tensor tr = torch::arange(0, 9, torch::kFloat32).reshape({ 3,3 });
	cout << tr << endl;
	return 0;
}

在这里插入图片描述
如果程序返回结果都为非0,那证明CUDA以及CUDNN都是可用的,自此环境已经搭建完成,但是也有可能返回结果为0证明CUDA以及CUDNN都不可用。需要进行CUDA的配置命令:
【属性】→【命令行】,输入:

/INCLUDE:"?ignore_this_library_placeholder@@YAHXZ" 

在这里插入图片描述
成功运行:
在这里插入图片描述
注意这里不同版本libtorch对应命令不一,博主是用的cuda12.1对应的libtorch,即LibTorch1.13.1版本。更早版本的可以参考以下命令:

libtorch1.8.1/cuda10:
/INCLUDE:?warp_size@cuda@at@@YAHXZ

libtorch1.9.0/cuda11: 
/INCLUDE:"?searchsorted_cuda@native@at@@YA?AVTensor@2@AEBV32@0_N1@Z 

libtorch1.10.2+cu113: 
/INCLUDE:?warp_size@cuda@at@@YAHXZ -INCLUDE:?searchsorted_cuda@native@at@@YA?AVTensor@2@AEBV32@0_N1@Z 

三、BUG记录

3.1、 #error You need C++17 to compile PyTorch

在这里插入图片描述

这个错误导致程序直接无法运行,搜了下原因

  • libtorch (PyTorch C++)根据系统(Win/Mac/Linux)和GPU/CUDA(version) 选择install 之后就可通过Cmake find_package 直接使用,但是默认编译libtorch 为 C++14,如果和其他 C++17 编译得到的库共同链接到项目,就可能产生一系列问题:如下图,原因是先链接 C++14 编译的torch,会将编译设为 C++14,再去链接C++17的库,就无法识别C17加入标准库的内容,编译报错。

网上很多教程都没用,最后我是从版本入手,想着直接修改C++版本,最后成功解决,而且极为简单。
【常规】→【C++语言标准】,初次打开是默认的C++14,这里改为C++17即可。
在这里插入图片描述

3.2、“LNK 200:/INCLUDE:?warp_size@cuda@at@@YAHXZ -INCLUDE:?searchsorted_cuda@native@at@@YA?AVTensor@2@AEBV32@0_N1@Z 未识别的指令”

这个就是cuda配置的时候添加了和版本不适配的命令,按照【2.5】种cuda配置进行修改即可。

3.3、 “#error std 不明确的符号”

在这里插入图片描述

把《符合模式》改为否;

在这里插入图片描述

3.4、由于找不到xxx.dll,无法继续执行代码,重新安装程序可能会解决此问题

2种方法可以解决。

  • 方法1:将缺失的.dll文件拷贝到工程目录里,即“当前工程的Example\build\Release(或debug,取决于你是采用release还是debug模式)”里,或者说放置在工程编译后的可执行文件同一目录下。
  • 方法2:即【2.5】中的方法,直接在【配置属性】→【调试】→【环境】中添加添加libtorch动态库的路径PATH=**\libtorch-cu121\libtorch\lib;%PATH%

3.5 由于找不到VCRUNTIME 140_1D.dll,无法继续执行代码

除了外部动态库,程序还需要一些windows系统自带的动态库,但有的时候也会出现找不到这些库的情况,这大概率是因为你的系统里就是没有这些库。
解决方法也很简单,只需要去https://www.dll-files.com/网站下载你缺少的dll动态库,得到该文件的压缩包,然后解压把该.dll文件复制到C:\Windows\System32目录下即可。

更多BUG可以参考BUG

终于结束。踩雷无数,在解决问题中进步吧。

有什么问题欢迎私信博主!

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
配置OpenCV在Visual Studio中,你可以按照以下步骤进行操作: 1. 首先,确保你已经下载了Visual Studio 2022和OpenCV 4.6.0,并且你的操作系统是64位的Windows 10。 2. 打开Visual Studio 2022,并创建一个新的项目。 3. 将OpenCV的属性表(props文件)添加到项目路径下,并将其添加到项目中。这样可以避免重复配置OpenCV的属性和切换编译模式的麻烦。\[2\] 4. 添加OpenCV的环境变量。你可以在系统环境变量中添加OpenCV的安装路径,确保环境变量生效。最好在添加完环境变量后重启电脑,以确保环境变量的生效。如果环境变量未生效,可能会导致找不到OpenCV的dll文件,从而报错计算机丢失xxx.dll的错误。\[3\] 这样,你就成功配置OpenCV在Visual Studio中。你可以开始使用OpenCV进行图像处理和计算机视觉的开发了。 #### 引用[.reference_title] - *1* [vs怎么配置OpenCV?2022vs配置OpenCV详解(多图)](https://blog.csdn.net/gu1857035894/article/details/125473159)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [VS配置OpenCV教程(超详细)](https://blog.csdn.net/mars_xiaolei/article/details/78759041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我宿孤栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值