使用Meson作为CUDA构建系统时遇nvcc编译报错问题求助
问题描述
我有一个hello.cu源文件,代码如下:
#include <iostream> int main(int, char**) { std::cout << "hello world" << std::endl; return 0; }
对应的meson.build配置:
project('hello', 'cuda') executable('hello', 'hello.cu')
执行meson setup时出现错误:
meson.build:1:0: ERROR: Compiler nvcc cannot compile programs.
手动执行以下命令可成功编译:
nvcc -o hello -ccbin /usr/bin/g++-13 hello.cu
由于CUDA 12不支持gcc 14.1,我尝试设置环境变量CXX=/usr/bin/g++-13后执行CXX=/usr/bin/g++-13 meson setup build,但仍出现相同错误。
解决方案
问题核心是Meson默认未将指定的C++编译器传递给nvcc作为宿主编译器,需显式配置nvcc使用兼容的gcc 13。以下是三种可行方法:
方法1:在meson.build中指定nvcc的ccbin参数
修改meson.build,给nvcc添加-ccbin参数:
project('hello', 'cuda') executable( 'hello', 'hello.cu', cuda_args : ['-ccbin=/usr/bin/g++-13'] )
方法2:通过环境变量指定CUDA宿主编译器
执行meson setup时直接设置CUDA_HOST_COMPILER环境变量:
CUDA_HOST_COMPILER=/usr/bin/g++-13 meson setup build
方法3:在project声明中指定兼容的C++编译器
在project配置中明确指定C++编译器版本,确保Meson配合nvcc使用gcc 13:
project('hello', ['cuda', 'cpp'], default_options : ['cpp_compiler=g++-13']) executable('hello', 'hello.cu')
以上任一方法都能让nvcc使用兼容的gcc 13完成编译,解决CUDA 12与gcc 14.1的兼容性问题。
内容的提问来源于stack exchange,提问作者Pedro Henrique Dalla Pacce
相关产品推荐
相关产品推荐

