为什么nvcc无法编译boost::spirit的CUDA文件?

Why does nvcc fails to compile a CUDA file with boost::spirit?

本文关键字:spirit 文件 CUDA boost nvcc 编译 为什么      更新时间:2023-10-16

我正在尝试将CUDA集成到使用boost::spirit的现有应用程序中。

隔离这个问题,我发现下面的代码不能用nvcc编译:

main.cu:

#include <boost/spirit/include/qi.hpp>
int main(){
    exit(0);
}

nvcc -o cudaTest main.cu编译,我得到了很多错误,可以在这里看到。

但是如果我将文件名更改为main.cpp,并使用nvcc再次编译,它就可以工作了。这里发生了什么,我该如何解决?

nvcc有时在编译复杂的模板代码时遇到麻烦,例如在Boost中发现的代码,即使这些代码仅在__host__函数中使用。

当一个文件的扩展名是.cpp时,nvcc本身不执行解析,而是将代码转发给主机编译器,这就是为什么根据文件扩展名的不同,您会观察到不同的行为。

如果可能的话,尝试将依赖于Boost的代码隔离到不需要由nvcc解析的.cpp文件中。

我也一定要尝试nvcc,它与最近的CUDA 4.1一起发布。nvcc的模板支持在每个版本中都有所改进。