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

时间:2011-11-15 15:22:12

标签: c++ boost cuda boost-spirit nvcc

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

隔离问题,我发现以下代码不能与nvcc联系:

main.cu

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

使用nvcc -o cudaTest main.cu进行编译我收到了很多可以看到的错误here

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

1 个答案:

答案 0 :(得分:4)

nvcc有时无法编译Boost中的复杂模板代码,即使代码仅用于__host__函数。

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

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

我还要确保尝试最近CUDA 4.1附带的nvcc。每个版本都会提高nvcc的模板支持。