我已经安装了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。
答案 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