我正在尝试将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进行编译,则可以正常工作。这是怎么回事,我该如何解决?

最佳答案

nvcc有时在编译复杂的模板代码(例如在Boost中找到)时会遇到麻烦,即使该代码仅在__host__函数中使用也是如此。

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

如果可能,请尝试将依赖Boost的代码隔离到.cpp文件中,这些文件无需由nvcc解析。

我还要确保尝试使用最新CUDA 4.1附带的nvccnvcc的模板支持在每个发行版中都会提高。

关于c++ - 为什么nvcc无法使用boost::spirit编译CUDA文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29158154/

10-10 08:08