windows sdk 7.1 64 位构建 CloseHandle 显然不在 kernel32.lib

windows sdk 7.1 64-bit build CloseHandle apparently not in kernel32.lib

我已经安装了 SDK 7.1,正在尝试将 C/C++ 项目从 MinGW(32 位)移植到 SDK 7.1 随附的 64 位 VC 2010。我是在SDK安装时设置的命令行环境下编译的

我得到了所有要编译的文件,但是链接打败了我,无论是当我设置一个带有静态链接的 C/C++ 运行-time 的构建时,还是当我设置具有 C/C++ 运行 时间动态链接的替代构建。

例如 Kernel32.lib 是我链接的一部分,它在这里,C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64\Kernel32.Lib 我确认它正在检索自,但以下链接错误是两个版本报告的众多错误之一。

错误 LNK2019:无法解析的外部符号 __imp__CloseHandle@4

如何解决这些联动问题? SDK 中没有其他 x64 Kernel32.lib 或随附的 VC 2010。

如果您处于正确的命令行环境中,可以通过在安装了 VS 2010 的情况下从命令提示符调用 %VS100COMNTOOLS%\..\..\VC\vcvarsall.bat x64 来设置,那么只需 [=13] 就可以编译以下简单程序=]. kernel32.lib 自动链接,因为所有 Windows 应用程序都需要它:

#include <windows.h>

int main()
{
    HANDLE h;
    CloseHandle(h);
}

听起来您正在使用 32 位编译器并明确指定 64 位 kernel32.lib,我可以重现。请注意横幅“32 位 C/C++ 优化编译器...”:

C:\>cl test.cpp -link "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64\Kernel32.Lib"
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

test.cpp
c:\test.cpp(6) : warning C4700: uninitialized local variable 'h' used
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:test.exe
"c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64\Kernel32.Lib"
test.obj
test.obj : error LNK2019: unresolved external symbol __imp__CloseHandle@4 referenced in function _main