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

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

本文关键字:kernel32 lib CloseHandle sdk 64位 构建 windows      更新时间:2023-10-16

我已经安装了SDK 7.1,正在尝试将C/C++项目的端口从MinGW(32位)连接到SDK 7.1附带的64位VC 2010。我在安装SDK时为其设置的命令行环境中进行编译。

我得到了所有要编译的文件,但链接让我失败了,无论是在我设置了一个带有C/C++运行时静态链接的构建时,还是在我设置一个带有C/C++运行时动态链接的备用构建时。

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

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

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

如果您处于正确的命令行环境中,如果安装了VS 2010,则可以通过在命令提示符下调用%VS100COMNTOOLS%....VCvcvarsall.bat x64来设置该环境,那么只需使用cl test.cpp即可编译以下简单程序。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 SDKsWindowsv7.1ALibx64Kernel32.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 SDKsWindowsv7.1ALibx64Kernel32.Lib"
test.obj
test.obj : error LNK2019: unresolved external symbol __imp__CloseHandle@4 referenced in function _main