4

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

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

main.cu

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

编译时nvcc -o cudaTest main.cu会出现很多错误,可以在这里看到。

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

4

1 回答 1

5

nvcc有时在编译复杂的模板代码时遇到困难,例如在 Boost 中找到的,即使该代码仅用于__host__函数中。

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

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

我还要确保尝试最近的CUDA 4.1nvcc附带的。的模板支持随着每个版本的发布而改进。nvcc

于 2011-11-15T15:43:20.483 回答