使用cygwin64编译darknet时候到nvcc -gencode arch=compute_61,code=sm_61 提示“cl: 命令行 error D8021 :无效的数值参数“/Wfatal-errors”
make: *** [Makefile:241: obj/convolutional_kernels.o] Error 2”如下图(这部换了多个compute运行还是报一样错误)

使用cygwin64编译darknet时候到nvcc -gencode arch=compute_61,code=sm_61 提示“cl: 命令行 error D8021 :无效的数值参数“/Wfatal-errors”
make: *** [Makefile:241: obj/convolutional_kernels.o] Error 2”如下图(这部换了多个compute运行还是报一样错误)

中午好🌞🌞🌞
本答案参考通义千问
你在使用 Cygwin64 编译 Darknet 时遇到的错误信息是:
cl: 命令行 error D8021 :无效的数值参数“/Wfatal-errors”
make: *** [Makefile:241: obj/convolutional_kernels.o] Error 2
这个错误提示表明 nvcc 在调用 cl.exe(微软的 C/C++ 编译器)时,传递了一个不被支持的参数 /Wfatal-errors,这可能是由于 CUDA Toolkit 的版本与 Windows SDK 或 Visual Studio 的兼容性问题引起的。
/Wfatal-errors 是一个 MSVC(Microsoft Visual C++)编译器参数,但某些 CUDA 版本中可能不支持该参数,导致编译失败。cl.exe)。nvcc 调用了错误的 cl.exe。推荐 CUDA 版本:
建议:不要使用过老的 CUDA 版本(如 9.x)
确保 nvcc 调用的是正确版本的 cl.exe,而不是 Cygwin 中的 GNU 工具链。
你可以修改 Makefile 中的 NVCC 指向路径,例如:
NVCC = /usr/local/cuda/bin/nvcc
或者直接使用绝对路径。
Makefile 中的编译参数找到 Makefile 中定义 NVCCFLAGS 的部分,将以下内容进行修改:
NVCCFLAGS += -Xcompiler "/wd4065" "/wd4996" "/Wfatal-errors"
NVCCFLAGS += -Xcompiler "/wd4065" "/wd4996"
重点:移除
/Wfatal-errors参数,因为该参数在某些 MSVC 版本中不被支持。
确保你已经安装了最新版本的:
如果你继续遇到问题,建议改用 Windows Subsystem for Linux (WSL) 来编译 Darknet,这样可以避免 Cygwin 与 Windows 工具链的冲突。
# 安装 WSL(如果未安装)
wsl --install
# 安装 Ubuntu
sudo apt update && sudo apt install -y build-essential libopencv-dev python3-pip
然后在 WSL 中执行 Darknet 的编译流程,会更稳定。
确认 CUDA 版本与 Visual Studio 兼容
检查并设置正确的编译器路径
nvcc 调用的是正确的 cl.exeMakefile 中指定 NVCC 的完整路径修改 Makefile 中的编译参数
移除 /Wfatal-errors 参数
示例修改如下:
# 原始
NVCCFLAGS += -Xcompiler "/wd4065" "/wd4996" "/Wfatal-errors"
# 修改后
NVCCFLAGS += -Xcompiler "/wd4065" "/wd4996"
更新 CUDA 和 Visual Studio
考虑使用 WSL 替代 Cygwin
如果你仍然无法解决,请提供以下信息以便进一步诊断:
nvcc --version)如有需要,我可以提供一份经过优化的 Makefile 示例。欢迎继续提问!