ATL on CUDA 出现编译错误

ATL on CUDA occurs compilation error

我在 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 库,我已将我的项目属性更改为使用共享 MFC 库。

但是当我尝试编译它时,出现了错误。 ERROR NO C2015, C2017, C2143,这是关于 "atlbase.h" 我从未修改过的语法错误。

你有什么在 CUDA 上使用 ATL 的解决方案吗?

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

众所周知,CUDA C++ 前端在非常复杂的模板声明上会失败(至少 boost、eigen、QT 被报告为在包含到 .cu 文件中时无法编译)。

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

如果您有在 .cu 文件中使用 ATL 的真实用例,我建议您联系 NVIDIA 开发人员支持并提出错误 report/feature 请求。