【发布时间】:2013-02-16 07:05:43
【问题描述】:
尝试在 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)
有人知道问题出在哪里吗?我试过谷歌搜索,但还没有找到解决方案。
非常感谢!
【问题讨论】:
-
一个类似的帖子是stackoverflow.com/questions/2061715,你试过这个解决方案吗?
-
嗨 Jermaine,是的,我在“配置属性->链接器->输入”中添加了正确的 CUDA 库路径,但我仍然收到此错误。事实上,cublas_device.lib(具有未解析的外部符号的文件)本身就是 CUDA 库的一部分——因此,我的链接器能够正确找到这些库文件。我认为这个库文件引用了链接器找不到的东西。此外,仅当我的 Visual Studio 配置平台为“调试”时才会发生这种情况。当它是“发布”时,可执行文件正确构建。
-
好的,试试这两件事:首先添加 cudart.lib 如果您还没有添加,但可能您已经添加了。第二:尝试在您的应用程序属性-> 链接器选项中启用单独编译。看看是否有帮助。 (编辑:也尝试按照here 的描述删除 device-link.obj
-
我没有看到在属性->链接器中启用单独编译的任何选项。您能否更具体地说明您希望我选择哪个选项?另外,您指的是链接器选项中的哪个部分?
-
我相信这个问题是由于
-c/-dc/-rdc开关的一些不正确组合被传递到各个模块和/或最后的链接步骤。如果您可以将针对每个模块发布到nvcc的完整命令行以及构建应用程序的最终链接步骤粘贴到原始问题中,将会很有帮助。此外,这是否是您从 cuda 4.2(或更早版本)迁移到 cuda 5.0 的项目?
标签: c++ visual-c++ cuda linker gpu