构建CUDA / C ++代码时链接器错误

时间:2013-02-16 07:05:44

标签: 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 __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)

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

非常感谢!

6 个答案:

答案 0 :(得分:2)

This article显示有关/ MLd链接器选项的功能的信息。它主要与加载的多线程库和项目配置有关。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您需要链接CUDA库的调试版本。您尝试在Debug模式下进行编译,但之后您链接到一个似乎没有在debug模式下构建的库。因此它搞得一团糟。

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

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

答案 3 :(得分:0)

看起来某种使用未定义的外部(外部)变量。该代码是进一步信息所必需的

答案 4 :(得分:0)

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

在任何情况下,由于我的项目不需要它,删除它可以解决问题。

非常感谢您的所有回复!

答案 5 :(得分:0)

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