2

尝试在 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)

有人知道问题可能出在哪里吗?我试过用谷歌搜索,但还没有找到解决方案。

非常感谢!

4

6 回答 6

2

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

于 2013-02-22T19:00:05.673 回答
2

您的(调试)项目是否设置为与 microsoft 链接器或 nvcc 链接?(错误消息似乎来自微软链接器。)你可能想看看这个问题

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

于 2013-02-26T20:30:02.570 回答
1

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

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

此外,使用相同版本的编译器来构建所有libs 可能会有所帮助,否则您可能会遇到名称修改问题(这也可能是您的问题的潜在原因)。切换到较新的 VS 版本后发生在我身上:我必须重新编译.lib我链接的所有内容。

于 2013-02-26T07:15:46.313 回答
0

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

于 2013-02-25T12:23:25.203 回答
0

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

无论如何,由于我的项目不需要它,因此删除它可以解决问题。

非常感谢您的所有回复!

于 2013-02-27T18:54:10.137 回答
0

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

于 2014-03-03T09:45:44.690 回答