You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么CMake编译CUDA C++项目正常,nvcc直接编译却报错?

问题原因及解决办法

直接用nvcc -o test1 test.cu编译报错找不到ATen/ATen.h,核心原因是你没在命令里指定LibTorch的头文件路径和依赖库参数——CMake之所以能正常构建,是因为它通过find_package(Torch)自动帮你配置了这些必要的编译链接参数,而手动敲nvcc命令时这些参数都缺失了。

具体解决步骤

1. 补全nvcc编译参数

你需要在nvcc命令中添加头文件路径(-I参数)和链接库参数(-L和-l参数),参考你CMakeLists里的配置,命令应该类似:

nvcc -o test1 src/test.cu \
-I/data/extern/libtorch/include \
-I/data/extern/libtorch/include/torch/csrc/api/include \
-I./src \
-L/data/extern/libtorch/lib \
-ltorch -ltorch_cpu -lc10
  • -I:指定头文件搜索目录,包含LibTorch的头文件和你自己的src目录
  • -L:指定库文件搜索目录
  • -l:链接需要的LibTorch库文件

2. 更省心的方式:从CMake的编译输出中提取命令

如果不确定具体参数,可以在Build目录下执行:

cmake .. -DCMAKE_VERBOSE_MAKEFILE=ON
make

开启CMAKE_VERBOSE_MAKEFILE后,make会打印出完整的编译命令,你直接复制其中针对test.cu的nvcc命令,就能直接用来手动编译调试了。

额外注意

既然CMake能正常编译,说明你的LibTorch版本和CUDA 11.1是兼容的,这部分无需额外调整。

内容的提问来源于stack exchange,提问作者Tony.sy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 19:28:20