在命令行上编译时出现LNK2001错误,但在IDE中没有

时间:2013-07-12 18:35:00

标签: visual-studio-2010 visual-c++ linker cl.exe

我有一个在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添加到link命令中的库列表中。这产生了一个新的链接器错误:

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.libmsvcmrtdmsvcprtdmsvcrtdmsvcurtmsvcurtd。这些库文件之间有什么区别,有人选择使用哪个?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的错误,我知道如何修复它。

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

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

它应该有效