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

Vik*_*Vik 4 c++ boost cuda boost-spirit nvcc

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

隔离问题后,我发现以下代码无法与 nvcc 编译:

main.cu

#include <boost/spirit/include/qi.hpp>
int main(){
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

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

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

Jar*_*ock 5

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

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

如果可能,尝试将依赖 Boost 的代码隔离到.cpp不需要由nvcc.

我还会确保尝试nvcc使用最近的CUDA 4.1附带的。nvcc的模板支持随每个版本而改进。