我正在尝试将 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/8138673/

10-11 21:49