0

我正在尝试使用链接到 CUDA 项目的 Visual Studio C++ 来实现 Windows 窗体应用程序。

  1. 我创建了 WFA。

  2. 然后我尝试通过浏览项目属性的添加引用部分中的 .dll 将应用程序动态链接到 CUDA 项目。但它说“无法添加......它不是 .NET 程序集或注册的 ActiveX 控件”。

  3. 因此,我将 CUDA 项目的 .obj 添加到 Linker->Input->Additional Dependencies 部分,其中包含在 WFA 项目中运行 CUDA 所需的 .lib 文件。然后我收到“致命错误 LNK1313:检测到纯模块;无法与 ijw/native 模块链接”错误。

  4. 我将公共语言运行时支持从“纯 MSIL 公共语言...”更改为“公共语言...”,但随后 msvcrtd.lib 和 libcmt.lib 发生冲突。当从“附加依赖项”中删除 CUDA 项目的 .obj 文件时,此错误消失。

由于CUDA项目的runtime是MT,WFA项目是MT dll,所以会出现这个错误。我将 WFA 的运行时更改为 MT,但随后出现“错误 D8016:'/MTd' 和 '/clr' 命令行选项不兼容”错误。

由于识别“System::”需要/clr,因此我无法摆脱/clr 选项。

您对使用 Windows c++ 创建一个以最简单的方式链接到 cuda 项目的 Windows 窗体应用程序有什么建议吗?或者,如果有更简单的方法,我会很高兴听到它们。

4

1 回答 1

1

我认为您的 WFA 应用程序是使用 CLR 的托管 C++ .NET 应用程序。您正在尝试包含非托管 CUDA DLL,就好像它是 CLR 程序集或 COM 对象一样。因此 VS 说 /MT(使用非托管多线程 C 运行时)和 /CLR 不兼容。

因此,您需要将 CUDA DLL 包装在 CLR 对象中,或者在项目中为 CUDA 使用 .NET 绑定。尝试下载 CUDA.NET 并将其合并到您的项目中作为参考。

http://www.hoopoe-cloud.com/Solutions/CUDA.NET/

于 2012-08-06T21:06:38.100 回答