从命令提示符编译 CUDA 时出现链接错误

Posted

技术标签:

【中文标题】从命令提示符编译 CUDA 时出现链接错误【英文标题】:Link error while Compiling CUDA from command prompt 【发布时间】:2012-03-14 18:40:11 【问题描述】:

我正在尝试使用以下命令通过命令提示符在 Windows 7 x64 上编译 CUDA 测试程序:

nvcc cuda.cu

我得到以下输出,然后是这个错误消息:

cuda.cu
tmpxft_00000d14_00000000-3_cuda.cudafe1.gpu
tmpxft_00000d14_00000000-8_cuda.cudafe2.gpu
cuda.cu
tmpxft_00000d14_00000000-3_cuda.cudafe1.cpp
tmpxft_00000d14_00000000-14_cuda.ii
LINK : fatal error LNK1104: cannot open file 'kernel32.lib'

我在 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib 中有 kernel.lib 文件,但将其添加到 CUDA lib 环境变量不起作用。

什么会导致这个错误,我该如何纠正它?

【问题讨论】:

尝试添加“-machine 32”作为参数 试过了@Jay 它说 nvcc fatal : 'achine': 期望一个数字。然后尝试“--machine 32”仍然给出,LINK:致命错误LNK1104:无法打开文件'kernel32.lib' -m64 怎么样,因为您使用的是 64 位操作系统? 试过了@harrism 它给出了同样的错误。 实际上,您需要一个主机编译器来构建 CUDA 代码,因此即使库位置正确,您也可能无法构建。请参阅 CUDA 发行说明。 【参考方案1】:

您不应在环境变量中指定 MS lib 位置。您需要使用 '-L' 命令行选项,如

nvcc <file> -L"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib"

确实,您可能需要安装 Visual Studio,因为您需要一个主机编译器来构建您的主机代码。

【讨论】:

哦。我安装了 Visual Studio 速成版。从命令行运行时,它给出了很多错误!以下是其中的一些.. LIBCMT.lib(commit.obj):错误 LNK2001:无法解析的外部符号 __imp_GetLastError LIBCMT.lib(lseeki64.obj):错误 LNK2019:无法解析的外部符号 __imp_GetLastError 在函数 _lseeki64_nolock LIBCMT.lib(close. obj) : error LNK2001: unresolved external symbol __imp_GetLastError LIBCMT.lib(osfinfo.obj) : error LNK2001: unresolved external symbol __imp_GetLastError a.exe : fatal error LNK1120: 76 unresolved externals 我刚刚安装了 Visual Studio 10.0 Express 和 Windows SDK 7.1,但没有收到您遇到的错误。但是,我无法让它编译 64 位(64 位 CUDA 工具包的默认设置)。通过添加--machine 32,我确实让它编译没有错误。要在没有该选项的情况下进行编译,我必须安装 Visual Studio 10.0 Professional。 谢谢你解决了我的问题。我现在已经迁移到 MacOSX 并且能够使用 nvcc 编译和运行代码。

以上是关于从命令提示符编译 CUDA 时出现链接错误的主要内容,如果未能解决你的问题,请参考以下文章

linux使用make命令编译时出现啥提示证明make成功呢?

尝试使用 Armadillo 库运行示例时出现 Xcode C++ 链接器错误

在 Windows 10 的 ROS 中使用 catkin_make 时出现问题

为啥编译时出现cannot find lz错误,怎么解决

在 Windows 中编译 Qt 时出现致命错误

在Linux系统里运行shutdown.sh命令关闭Tomcat时出现错误提示