caiquan866 2025-08-24 00:15 采纳率: 50%
浏览 25
已结题

cuda11.4在vs上编译cu文件报错MSB3721退出返回1,应该怎么破

想请教一下,在编译cu文件时报错MSB3721退出返回1

img

img

img

img

系统和硬件,笔记本电脑显卡集显英特尔独显GTX1060,cuda11.4,cudnn8.2.4,vs2019 16.11

img

img


系统环境变量

img

img

img

img

img

img

img


系统变量path

img

img

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\libnvvp
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
C:\Program Files\NVIDIA Corporation\Nsight Compute 2021.2.2\
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\extras\demo_suite
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin

用process monitor检测的结果

img

img

img

img

img

img

img


进程树

img

安装的程序和vs安装的组件

img

img

img

img


项目属性cuda c/c++

img

img

img

img

代码应该没问题的,最小代码和示例代码都试过都一样
到底是哪出了问题啊,已经卡在这好久了,装个cuda就是用不了,应该怎么解决啊

  • 写回答

5条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-08-24 01:00
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案让您满意,请采纳、点赞、关注,非常感谢!
    .
    每日一句正能量,让它带给您好心情:你所坚持的,终会反过来拥抱你。
    .

    你好,你遇到的 MSB3721 错误是 CUDA 在 Visual Studio 中编译时的一个常见但棘手的问题,它表明 nvcc 编译器进程在执行过程中失败并返回了错误代码 1。根据你提供的大量信息(图片和详情),问题的核心指向了环境配置,特别是 nvcc 在调用宿主 C++ 编译器 (cl.exe) 时找不到必要的 Windows SDK 头文件。

    问题根源分析

    从 Process Monitor 的日志(图片16-22)可以清晰地看到,nvcc.exe 在尝试调用 cl.exe 后,cl.exe 进程(PID: 16552)因为“找不到路径”而疯狂地、重复地尝试访问 C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python3... 等完全不相关的路径。这强烈表明 cl.exe 无法定位到它真正需要的 Windows SDK 头文件(如 windows.h),从而编译失败,导致 nvcc 也失败。

    根本原因在于:**CUDA 构建系统未能正确地将 Windows SDK 的包含(include)和库(lib)目录传递给宿主编译器 (cl.exe)**。

    解决方案

    请按照以下步骤逐一检查和修复,第一步和第二步是最可能直接解决问题的

    第一步:修复或重新安装 Windows SDK

    这是最直接和最可能的解决方案。你的系统变量中已经设置了 CUDAFE_FLAGS,但它指向的 SDK 版本 (10.0.19041.0) 可能不完整或损坏。

    1. 打开 Visual Studio Installer
    2. 找到你已安装的 Visual Studio 2019,点击 “修改”
    3. “工作负荷” 选项卡中,找到并确保 “使用 C++ 的桌面开发” workload 被选中。
    4. 在右侧的 “安装详细信息” 面板中,找到 “Windows 10 SDK (10.0.19041.0)” 或类似的版本。取消勾选它,然后重新勾选它。如果看到更高版本(如 10.0.20348.0),也建议一并安装。
    5. 点击 “修改” 按钮完成更改。安装程序会下载并安装或修复选中的 SDK 组件。

    第二步:验证并修复环境变量

    修复 SDK 后,需要确保环境变量指向正确的路径。

    1. 在 Windows 搜索栏输入 “编辑系统环境变量” 并打开它。

    2. 点击 “环境变量”

    3. “系统变量” 中找到 CUDAFE_FLAGS 变量。

      • 确保其值为--sdk_dir "C:\Program Files (x86)\Windows Kits\10"
      • 这个路径不应该包含具体的版本号(如 10.0.19041.0),nvcc 会自动选择最新或合适的版本。
    4. “系统变量” 中找到 Path 变量,点击 “编辑”

      • 确保包含以下路径(你的列表里已经有了,检查即可):
        • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\bin
        • C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\libnvvp
        • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64
        • C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64 (此路径也应存在,用于工具链)
    5. 同样在 “系统变量” 中,检查以下变量是否存在且指向正确路径(非常重要!):

      • INCLUDE: 应该包含 VC 和 Windows SDK 的 include 路径。
        • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include
        • C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt
        • C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared
        • C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um
      • LIB: 应该包含 VC 和 Windows SDK 的 lib 路径。
        • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64
        • C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x64
        • C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64

      注意:如果 INCLUDELIB 变量不存在,不要手动创建它们。现代 Visual Studio 和 CUDA 主要通过 Developer Command Prompt 设置的环境来工作。这些变量通常是在你启动 “Developer Command Prompt for VS 2019” 时自动设置的。确保你总是在这个命令行环境下编译项目,或者在 VS 中直接构建(VS 会自动配置好)。

    第三步:在 Visual Studio 中验证项目设置

    你的项目属性(图片28-31)看起来是正确的,但可以再确认一下:

    1. 右键点击项目 -> 属性 -> 配置属性 -> CUDA C/C++ -> Common
    2. 确保 “Use Host Include Directories” 设置为 **Yes**。这允许 nvcc 使用宿主编译器 (cl.exe) 的包含目录,这是关键。

    第四步:使用 Developer Command Prompt 进行测试

    为了彻底排除 VS 项目设置的问题,我们可以用最原始的方法测试 nvcc 本身。

    1. 在 Windows 开始菜单中找到并打开 “Developer Command Prompt for VS 2019”务必使用这个,而不是普通的 CMD 或 PowerShell。
    2. 导航到你的 test.cu 文件所在目录。
    3. 尝试手动执行 nvcc 命令(直接从你图片2的错误日志里复制并稍作修改):
    nvcc -gencode=arch=compute_61,code=sm_61 -x cu -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.4\include" -lineinfo --machine 64 --compile -cudart static -DWIN32 -DWIN64 -DNDEBUG -D_CONSOLE -D_MBCS -o test.obj test.cu
    
    • 如果这个命令依然失败,并且报错是关于 cannot open source file "windows.h" 或类似信息,那么 100% 确定是 Windows SDK 的问题,请回到第一步。
    • 如果这个命令成功生成了 test.obj 文件,说明你的 nvcc 和编译器环境在命令行下是好的,问题可能出在 VS 的项目文件传递参数上。可以尝试创建一个新的 CUDA 项目对比测试。

    总结与建议

    根据你提供的 Process Monitor 日志,问题几乎可以断定是 Windows SDK 头文件找不到导致的

    行动顺序建议

    1. 首先执行第一步:通过 Visual Studio Installer 修复或重新安装 Windows 10 SDK (10.0.19041.0)。这是最可能解决问题的步骤。
    2. 修复完成后,无需重启,直接重新打开 Visual Studio 并尝试重新编译你的 CUDA 项目。
    3. 如果问题依旧,在 Developer Command Prompt 中执行第四步的测试命令,根据输出结果判断是环境问题还是 VS 项目问题。
    4. 确保你总是通过开始菜单的 Visual Studio 2019 快捷方式或者 Developer Command Prompt 来运行和编译,以保证所有必要的环境变量(特别是 INCLUDELIB)都被正确设置。

    这个问题确实很折磨人,但根源很明确,就是构建工具链的路径问题。耐心按照上述步骤操作,应该能够解决。祝你成功!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月24日