尝试在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)
任何人都知道问题可能在哪里?我试过谷歌搜索,但还没有找到解决方案。
非常感谢!
答案 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)”对我有用。