我正在尝试将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附带的nvcc
。 nvcc
的模板支持在每个发行版中都会提高。
关于c++ - 为什么nvcc无法使用boost::spirit编译CUDA文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29158154/