原文地址:https://blog.lanweihong.com/p...
错误描述
我在使用 VS 2015 编译 darknet
项目时报如下错误:
Github相关 issues: darknet build error MSB3721。
尝试解决
1. 修改 darknet.vcxproj
文件中 Code Generation
的值,即 compute_75,sm_75
(未解决)
按在网上找到解决方法 VS2015配置darknet项目时遇到MSB3721的解决办法 尝试解决。
- 修改
darknet.vcxproj
文件中的两处Code Generation
,将compute_86,sm_86
(网上说的compute_75,sm_75
,我这里是compute_86,sm_86
) 修改为compute_52,sm_52
; 修改后完整的值为compute_30,sm_30;compute_52,sm_52
。
这里的 compute_52,sm_52
是经过计算得出来的值,可能每个用户的显卡不一样,值也不一样,我的显卡是 GTX 1050Ti,这里用 "52",其他型号的显卡请查看英伟达的GPU算力表,地址是:https://developer.nvidia.com/... 。
- 在 VS 2015 的 "darknet 属性页" 窗口中,修改
Code Generation
的值为compute_30,sm_30;compute_52,sm_52
;
- 在 VS 2015 中重新生成
darknet
,发现还是 生成失败,还是报 MSB 3721 错误。
2. 删除 Code Generation
中的 compute_75,sm_75
(未解决)
- 编辑
darknet.vcxproj
,将Code Generation
中的compute_75,sm_75
删掉; - 同样的,在 VS 2015 的 "darknet 属性页" 窗口中,将
compute_75,sm_75
删掉; - 在 VS 2015 中重新生成
darknet
,发现还是 生成失败,还是报 MSB 3721 错误。
3. 删除 Code Generation
选项(未解决)
编辑 darknet.vcxproj
文件,删除 Code Generation
这项参数,注意的是删除后, darknet
会默认设置该参数值为 compute_52,sm_52
,这个在重新生成 darknet
后代码输出中可看到。
重新生成 darknet
,发现还是 生成失败,还是报 MSB 3721 错误。
4. 修改 OpenCV 版本为 3.4.14(未解决)
在 OpenCV 官网下载页 下载 "3.4.14" 版本后,重新部署,然后重新生成 darknet
,发现还是 生成失败,还是报 MSB 3721 错误。
5. 重新安装 CUDA(未解决)
重新安装 CUDA 后,再次重新生成 darknet
,发现还是 生成失败,还是报 MSB 3721 错误。
不过在重装 CUDA 过程中,NVIDIA Installer
提示 "Nsight for Visual Studio 2019 will not be installed,Nsight for Visual Studio 2017 will not be installed" 之类的信息让我有了思路:我要不安装个 VS 2019 试试?
6. 安装 Visual Studio 2019,使用其编译(已解决)
安装 Visual Studio 2019 完成后,重新解压 darknet-master.zip
,基于这份未做任何修改的代码做测试。按照之前的配置流程,修改 darknet.vcxproj
中 CUDA 版本,在 VS 2019 中配置 OpenCV。。。具体的可看我的另一篇描述搭建的文章 Windows 10搭建基于Darknet的 Yolov4目标检测平台,在 VS 2019 中,项目属性如下图:
配置完成后,重新生成 darknet
,这次竟然没任何报错,成功编译了!
在 x64
目录下也生成了 darknet.exe
可执行文件:
经过测试,发现没问题。至此,我的问题已解决。
总结
- 出现 MSB 3721 错误后,务必在 VS 2015/2017/2019 中检查
darknet
项目配置是否正确,配置的包含目录、库目录、引用库文件名等是否都存在,相关的环境变量是否配置好,有时引发错误的可能就是这些配置不正确导致的; - 升级 CUDA 至最新版本,并使用相应版本的 cuDNN;
- 根据显卡算力,修改
darknet.vcxproj
中的Code Generation
值,毕竟也有人使用这个方法解决的; - 使用 VS 2017或 VS 2019 来编译
darknet
。
每个人环境不一样,导致错误的问题也不一样,只有不断尝试各种方法、不断排错,才能找到问题的解决方案。具体项目具体分析,有时网上很多资料都是直接转载别人的内容,并不适合所有人,希望这篇文章能帮助到你们。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。