2013-07-12 1 views
0

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, msvcurtmsvcurtd입니다. 이 라이브러리 파일들 사이의 차이점은 무엇이며, 어떤 라이브러리 파일을 어떻게 선택합니까?

+0

왜 응용 프로그램을 두 번 연결합니까? 어쩌면 CRT를 다시 연결하는 걸 잊었을까요? –

+0

@ JochenKalmbach CRT와 연결을 시도했는데, 내 질문에 새로운 정보가 있습니다. IDE에서 생성 된 .log 파일은 해당 link 명령을 두 번 나열합니다. 링커 오류가 처음으로 발생하기 때문에 나는 그것에 도달하지 못했습니다. – Twosies

+0

"cl"을 사용하여 직접 빌드하려는 이유가 무엇입니까? 커맨드 라인에서 프로젝트를 빌드하기 위해 devenv를 사용하지 마십시오. 또한 프로젝트 설정에서 고급 옵션에 cl/link 명령 행이 표시됩니다. –

답변

0

나는 동일한 오류가있어서 어떻게 수정해야하는지 알고 있습니다.

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

(나는 프랑스어로 VS를 사용 나는 정확한 이름을 알고 해달라고)는 실수하고 선택 수정과는

작동합니다 :

프로젝트에서

, 당신은 비 GUI 프로젝트를 선택