为什么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
相关产品推荐
相关产品推荐

