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

时间:2015-03-01 19:39:07

标签: c++ c windows-7-x64

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

我得到了所有要编译的文件,但是当我使用C / C ++运行时的静态链接建立构建时,以及当我使用C / 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。

1 个答案:

答案 0 :(得分:1)

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

#include <windows.h>

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

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

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