This question already has an answer here:
Why does nvcc fails to compile a CUDA file with boost::spirit?

(1个答案)


4年前关闭。




我在NVdia Cuda架构上使用ATL(https://msdn.microsoft.com/en-us/library/3ax346b7.aspx)时遇到一些问题。

我已经在Visual Studio 2010上制作了CUDA7.5项目,并且刚刚添加了
#include <afxwin.h>

到我的默认源文件kernel.cu。

由于afxwin.h需要Microsoft MFC库,因此我将项目属性更改为使用Shared MFC库。

但是当我尝试编译它时,会发生错误。
错误C2015,C2017,C2143,这是与我从未修改过的“atlbase.h”有关的语法错误。

您有在CUDA上使用ATL的解决方案吗?

PS。 ATL在MVCC上运行良好,不是缺少头文件,dll等问题

最佳答案

已知CUDA C++前端无法在非常复杂的模板声明上失败(据报道,至少将boost,eigen,QT包含在.cu文件中时,编译失败)。

唯一的解决方案是将ATL代码隔离到.cpp文件中,而不将那些 header 包含在.cu文件中。 nvcc不会尝试通过CUDA C++解析器在.cpp文件中发送代码,并且不会出现任何错误。您可能需要在.cu文件中提供包装函数,以将包含代码的ATL链接到CUDA代码,具体取决于您的应用程序设计。

如果您有在.cu文件中使用ATL的实际用法,建议您与NVIDIA开发人员支持联系并提出错误报告/功能请求。

关于c++ - CUDA上的ATL发生编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35691105/

10-17 01:41