CL.exe를 사용하여 명령 줄에서 빌드 할 수 있어야하는 Visual Studio 2010에서 개발 된 대규모 VC++ 프로젝트가 있습니다. IDE에서는 프로젝트가 성공적으로 빌드되지만 명령 줄에서 빌드 할 수 없었습니다.명령 줄에서 컴파일 할 때 LNK2001 오류가 발생합니다.
나는 대부분 링커 오류 처리했고 하나에 그것을 아래로 입수했습니다 :
LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
C:\<path_to>\Debug\LargeProject.exe : fatal error LNK1120: 1 unresolved externals
내가 디버그 폴더에 얻을 정확한 명령 줄 인수를 보여줍니다 "LargeProject.log"라는 파일 IDE가 빌드 될 때 IDE에서 호출됩니다. 도움이된다면 여기에 기재했습니다. (I 오류가 도착할 때까지)와 testDump에 내용을 덤프 당신이 볼 수 있듯이
(일부 업데이트에 대한이 질문의 하단에 편집 노트를 참조하십시오)
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
, 나는 순서대로 이들 각각을 달렸다. 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 [email protected] 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
입니다. 이 라이브러리 파일들 사이의 차이점은 무엇이며, 어떤 라이브러리 파일을 어떻게 선택합니까?
왜 응용 프로그램을 두 번 연결합니까? 어쩌면 CRT를 다시 연결하는 걸 잊었을까요? –
@ JochenKalmbach CRT와 연결을 시도했는데, 내 질문에 새로운 정보가 있습니다. IDE에서 생성 된 .log 파일은 해당 link 명령을 두 번 나열합니다. 링커 오류가 처음으로 발생하기 때문에 나는 그것에 도달하지 못했습니다. – Twosies
"cl"을 사용하여 직접 빌드하려는 이유가 무엇입니까? 커맨드 라인에서 프로젝트를 빌드하기 위해 devenv를 사용하지 마십시오. 또한 프로젝트 설정에서 고급 옵션에 cl/link 명령 행이 표시됩니다. –