我正在尝试创建一个windows应用程序并静态地链接到CRT。我得到了这个错误,
链接:错误LNK2001:未解析的外部符号WinMainCRTStartup
我正在用这个命令行编译
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\cl.exe" /c main.cpp /O2 /I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" /I"C:\Program Files (x86)\Windows Kits\8.1\include\um" /I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" /I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\Include" /DWIN32 /D_WINDOWS /Zi /MT /nologo并链接到此命令行。
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\link.exe" user32.lib libcmt.lib kernel32.lib main.obj crt_win64.obj /SUBSYSTEM:WINDOWS /DEBUG /nologo /MACHINE:x64 /LIBPATH:"C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\Lib"如您所见,我在编译器上使用/MT开关,在链接器上使用/SUBSYSTEM:WINDOWS开关。
我还链接到libcmt.lib。
我的主要功能的签名是
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {我遗漏了什么?
发布于 2022-04-14 13:44:00
去死吧。
下面是关于VStudio (C / C++)构建的一堆有用的东西(我过去在处理各种挑战时遇到的):
当然,一种方法是手动指定每条路径,但这可能非常痛苦(特别是在交叉构建时)。
这就是VCVarsAll (也是VSDevCmd,但我更喜欢前者)发挥作用的地方。它为当前的构建配置设置了所有与VC相关的路径(.lib文件路径,甚至构建工具),因此您不必担心它们。有关更多细节,请查看[MS.Docs]:使用命令行中的Microsoft C++工具集。
通常,vcvarsall.bat (可能还想检查[MS.MSDN.Social]:vcvarsall.bat文件在哪里?)位于:
- _**${VSTUDIO\_INSTALL\_DIR}\VC**_- _**${VSTUDIO\_INSTALL\_DIR}\VC\Auxiliary\Build**_构建命令可能是什么样子:
:: Setup build for pc064
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64
:: Compile
cl /nologo /O2 /DWIN32 /D_WINDOWS /Zi /MD /Fomain.obj /c main.cpp
:: Link
link /NOLOGO /DEBUG /MACHINE:x64 /SUBSYSTEM:WINDOWS /OUT:main.exe main.obj kernel32.lib user32.lib当然,您可以为构建创建一个Makefile.mak:[MS.Docs]:运行NMAKE。
注意到:由于vcvarsall.bat向现有的环境变量(PATH,INCLUDE,LIBPATH,.)添加了(很多)目录,所以多次启动它(在pc032和pc064构建之间切换)可能会导致达到变量字符限制(32760) (这会引发问题)。因此,最好为每个目标CPU体系结构打开一个Cmd窗口(并且不要多次启动VCVarsAll )。
https://stackoverflow.com/questions/28005324
复制相似问题