C++ 在构建CUDA/C++;代码

C++ 在构建CUDA/C++;代码,c++,visual-c++,cuda,linker,gpu,C++,Visual C++,Cuda,Linker,Gpu,我在Visual Studio 2012中尝试构建CUDA/C++代码时遇到以下错误。我正在使用CUDA v5.0 1> Generating Code... 1>LINK : warning LNK4044: unrecognized option '/MLd'; ignored 1>cublas_device.lib(kepler_sm35_gemm_wrapper.obj) : error LNK2019: unresolved external symbol __cu

我在Visual Studio 2012中尝试构建CUDA/C++代码时遇到以下错误。我正在使用CUDA v5.0

1>  Generating Code...
1>LINK : warning LNK4044: unrecognized option '/MLd'; ignored
1>cublas_device.lib(kepler_sm35_gemm_wrapper.obj) : error LNK2019: unresolved external symbol __cudaRegisterLinkedBinary_59_tmpxft_00001040_00000000_8_kepler_sm35_gemm_wrapper_cpp1_ii_9402ff4f referenced in function "void __cdecl __sti____cudaRegisterAll_59_tmpxft_00001040_00000000_8_kepler_sm35_gemm_wrapper_cpp1_ii_9402ff4f(void)" (?__sti____cudaRegisterAll_59_tmpxft_00001040_00000000_8_kepler_sm35_gemm_wrapper_cpp1_ii_9402ff4f@@YAXXZ)
有人知道问题出在哪里吗?我试过在谷歌上搜索,但还没有找到解决办法


非常感谢

显示有关/MLd链接器选项的功能的信息。它本质上与加载多线程lib和项目的配置有关。

它看起来像是在使用未定义的外部(extern)变量。需要此代码以获取更多信息

您需要链接CUDA库的调试版本。您尝试在
Debug
模式下编译,但随后链接到一个似乎未在
Debug
模式下构建的库。因此,一切都变得一团糟

因此,您应该获取调试版本的
.lib
文件,或者如果您有源代码,就自己构建它。然后,将调试构建链接到debug
.lib
,并将其发布

此外,使用相同版本的编译器构建所有
lib
s可能会有所帮助,否则可能会遇到名称混乱问题(这也可能是问题的潜在原因)。在切换到较新的VS版本后,我遇到了这种情况:我必须重新编译我链接所针对的所有
.lib

您的(调试)项目是否设置为与microsoft linker或nvcc链接?(错误消息似乎来自microsoft链接器。)您可能需要查看


设备代码和设备库(您正在链接的)需要与nvcc链接。

我能够修复它!我正在链接到cublas_device.lib,它指的是一个未解析的外部符号。但是,我的项目不需要这个lib文件,所以从链接文件中删除它就行了!然而,在发布模式下,这个错误没有发生——可能是因为cublas_device.lib中的这部分代码在调试部分

在任何情况下,因为我的项目不需要它,所以删除它可以解决问题


非常感谢您的回复

我遇到了同样的问题,将配置类型从“动态库(dll)”更改为“静态库(lib)”对我很有效。

类似的帖子是,你尝试过这个解决方案吗?嗨,Jermaine,是的,我在“配置属性->链接器->输入”中添加了正确的CUDA库路径,但我仍然收到这个错误。事实上,cublas_device.lib(具有未解析外部符号的文件)本身就是CUDA库的一部分-因此,我的链接器能够正确找到这些库文件。我认为这个库文件引用了链接器找不到的内容。此外,只有当我的VisualStudio配置平台为“调试”时,才会发生这种情况。当它是“Release”时,可执行文件将正确生成。好的,只需尝试以下两件事:首先添加cudart.lib,如果您还没有添加,但可能已经添加了。第二:尝试在应用程序属性->链接器选项中启用单独编译。看看这是否有帮助。(编辑:如前所述,请尝试删除device-link.obj。我在属性->链接器中看不到任何启用单独编译的选项。能否请您更具体地说明您希望我选择的选项?另外,您正在谈论链接器选项中的哪个部分?我相信此问题是由于
-c/
-dc
/
-rdc
开关传递到各个模块和/或最终链接步骤。如果您可以将发布给
nvcc的每个模块的完整命令行和构建应用程序的最终链接步骤粘贴到原始问题中,这会很有帮助。此外,您是否有可能会选择此项目从cuda 4.2(或更早版本)迁移到cuda 5.0?