我正在尝试将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
再次编译,则可行。这里发生了什么,我该如何解决?
答案 0 :(得分:4)
nvcc
有时无法编译Boost中的复杂模板代码,即使代码仅用于__host__
函数。
当文件的扩展名为.cpp
时,nvcc
本身不执行解析,而是将代码转发给主编译器,这就是为什么根据文件扩展名观察不同的行为。
如果可能,请尝试将依赖于Boost的代码隔离到.cpp
文件中,而不需要nvcc
解析。
我还要确保尝试最近CUDA 4.1附带的nvcc
。每个版本都会提高nvcc
的模板支持。