0

我有一个在 Visual Studio 2010 中开发的大型 VC++ 项目,我需要能够使用 CL.exe 从命令行构建它。在IDE中,项目构建成功,但我一直无法在命令行上构建它。

我主要处理链接器错误并将其归结为一个:

LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
C:\<path_to>\Debug\LargeProject.exe : fatal error LNK1120: 1 unresolved externals

我在调试文件夹中找到了一个名为“LargeProject.log”的文件,它显示了在 IDE 构建时从 IDE 调用的精确命令行参数。我在这里列出了它们,如果有帮助的话。

(有关一些更新,请参阅此问题底部的编辑说明)

CL.exe /c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _MBCS /D _AFXDLL /Gm- /EHa /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yc"StdAfx.h" /Fp"Debug\LargeProject.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt "Source Files\stdafx.cpp" /wd4482 > testDump.txt
CL.exe /c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _MBCS /D _AFXDLL /Gm- /EHa /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug\LargeProject.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt <list of all source files except the following> /wd4482 > testDump.txt
CL.exe /c /Zi /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _MBCS /D _AFXDLL /Gm- /EHa /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug\LargeProject.pch" /Fo"Debug\\" /Fd"Debug\vc100.pdb" /Gd /TP /analyze- /errorReport:prompt "Source Files\LargeProject.cpp" /wd4482 > testDump.txt
rc.exe /D _DEBUG /D _AFXDLL /l"0x0409" /I"Debug\\" /nologo /fo"Debug\LargeProject.res" LargeProject.rc > testDump.txt
rc.exe /nologo /fo"Debug\LargeProject.exe.embed.manifest.res" "Debug\LargeProject_manifest.rc" > testDump.txt
link.exe /ERRORREPORT:PROMPT /OUT:"C:\<path_to>\Debug\LargeProject.exe" /INCREMENTAL /NOLOGO <list of libraries used> /MANIFEST /ManifestFile:"Debug\LargeProject.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\<path_to>\Debug\LargeProject.pdb" /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\<path_to>\Debug\LargeProject.lib" /MACHINE:X86 "Debug\LargeProject.res" > testDump.txt
// note that I don't run any of the commands below because the above command
//   threw an error.
mt.exe /nologo /verbose /out:"Debug\LargeProject.exe.embed.manifest" /manifest "Debug\LargeProject.exe.intermediate.manifest" "c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Include\Manifest\dpiaware.manifest" > testDump.txt
rc.exe /nologo /fo"Debug\LargeProject.exe.embed.manifest.res" "Debug\LargeProject_manifest.rc" > testDump.txt
link.exe /ERRORREPORT:PROMPT /OUT:"C:\<path_to>\Debug\LargeProject.exe" /INCREMENTAL /NOLOGO <list of libraries used> /MANIFEST /ManifestFile:"Debug\LargeProject.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\<path to>\Debug\LargeProject.pdb" /SUBSYSTEM:WINDOWS /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\<path_to>\Debug\LargeProject.lib" /MACHINE:X86 "Debug\LargeProject.res" > testDump.txt

如您所见,我按顺序运行每一个(直到出现错误)并将内容转储到 testDump.txt。这是第一个 link.exe 命令之后的 testDump.txt 的内容

LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
C:\<path_to>\Debug\LargeProject.exe : fatal error LNK1120: 1 unresolved externals

我很困惑,我在命令行上收到了这个错误,但不是来自 IDE,它可能只是在幕后运行这些命令。还值得注意的是,我已经从命令提示符窗口运行了 vcvars32.bat 文件,因此它不可能是本地环境变量问题。

编辑: 我尝试添加msvcrt.lib到链接命令中的库列表。这产生了一个新的链接器错误:

msvcrt.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
C:\<path_to>\Debug\LargeProject.exe : fatal error LNK1120: 1 unresolved externals

我读过这意味着项目中没有定义正确的入口点。即,项目中应该有一个 WinMain() 函数作为应用程序的入口点。这似乎合乎逻辑,但我还没有找到该功能,并且重申一下,该项目在 IDE 中编译和链接良好,并且大概我从中获得这些命令的日志文件只是列出了 IDE 无论如何都在做什么。

似乎还有其他 CRT 库。我试过msvcprt.lib了,但是在我添加任何东西之前,它会产生一个相同的错误消息。存在的其他类似 .lib 文件是msvcmrt.lib, msvcmrtd, msvcprtd, msvcrtd, msvcurt, 和msvcurtd. 这些库文件之间有什么区别,有人如何选择使用哪一个?

4

1 回答 1

0

我有同样的错误,我知道如何解决它。

在您的项目中,您选择了一个非 GUI 项目:这是一个错误并修复它选择(我不知道确切的名称,我在法语中使用 VS)

option->Link options->System->Sub-système=Windows 

它应该可以工作

于 2013-08-30T06:45:52.943 回答