为什么nvcc无法编译boost::spirit的CUDA文件?
Why does nvcc fails to compile a CUDA file with boost::spirit?
我正在尝试将CUDA集成到使用boost::spirit的现有应用程序中。
隔离这个问题,我发现下面的代码不能用nvcc编译:
main.cu
:
#include <boost/spirit/include/qi.hpp>
int main(){
exit(0);
}
用nvcc -o cudaTest main.cu
编译,我得到了很多错误,可以在这里看到。
但是如果我将文件名更改为main.cpp
,并使用nvcc
再次编译,它就可以工作了。这里发生了什么,我该如何解决?
nvcc
有时在编译复杂的模板代码时遇到麻烦,例如在Boost中发现的代码,即使这些代码仅在__host__
函数中使用。
当一个文件的扩展名是.cpp
时,nvcc
本身不执行解析,而是将代码转发给主机编译器,这就是为什么根据文件扩展名的不同,您会观察到不同的行为。
如果可能的话,尝试将依赖于Boost的代码隔离到不需要由nvcc
解析的.cpp
文件中。
我也一定要尝试nvcc
,它与最近的CUDA 4.1一起发布。nvcc
的模板支持在每个版本中都有所改进。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?
- 尝试在C++中使用JSON Spirit将JSON写入文件
- 如何使boost::spirit解析器和lexer能够处理include文件
- 预处理一个自定义文本文件,以使用Boost Spirit删除注释
- 使用 boost::spirit 解析二进制文件时更改属性类型
- 为什么nvcc无法编译boost::spirit的CUDA文件?
- 如何用Boost::Spirit解析复杂的字符串文件
- 我应该包括哪些头文件,以便在boost spirit中使用limit_d指令
- 使用boost::spirit::qi解析输入的CSV文件
- 使用Boost Spirit解析文本文件,同时跳过它的大部分