본문 바로가기
개발언어/C++

LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

by 엔돌슨 2011. 1. 20.
반응형

LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main 에러

(crt0.obj) : error LNK2001: unresolved external symbol _main 에러가 발생하였을 경우, Project Settings 을 확인하여 (crt0.obj) : error LNK2001: unresolved external symbol _main 에러를 잡을 수 있습니다. Project 설정에 보면 _ATL_MIN_CRT 라는 설정이 Preprocessor definitions 에 들어 가 있는 것을 알 수 있습니다. _ATL_MIN_CRT 문자를 지워서 컴파일을 하면 에러가 없이 컴파일이 됩니다. ATL/WTL의 위져드로 생성을 할 경우, 자동적으로 생성이 됩니다.


프로젝트 설정에서 설정을 조정


_ATL_MIN_CRT, IT, C++, ATL, WTL, LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main, LIBCMT.lib(crt0.obj) : error LNK2001:, LIBCMT.lib, error LNK2001: unresolved external symbol _main, C++ 에러, VC++, MFC


LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main 에러는 _ATL_MIN_CRT 설정을 없애주면 에러가 나지 않습니다.


_ATL_MIN_CRT, IT, C++, ATL, WTL, LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main, LIBCMT.lib(crt0.obj) : error LNK2001:, LIBCMT.lib, error LNK2001: unresolved external symbol _main, C++ 에러, VC++, MFC

프로젝트에 포함되어 있는 _ATL_MIN_CRT 코드입니다. 찾아 지우는 것이 아니라 설정에서 제거 하세요.


MSDN 설명


http://msdn.microsoft.com/ko-kr/library/cc485273(v=VS.71).aspx

ATL 프로젝트에서 _ATL_MIN_CRT 사용

ATL 을 사용하는 가장 큰 두 가지 목적은 다음과 같습니다
1. 이미지 크기 최소화
2. 런타임 DLL에 대한 의존성 최소화

CRT가 제공하는 일부 함수를 이용할 수도 있습니다. 그러나 CRT를 사용할 경우, 정적으로 링크하면 이미지 크기가 커지고 동적 링크하면 런타임 DLL이 반드시 필요하기 때문에, 이와 같은 ATL 사용 목적을 달성하지 못할 수도 있습니다.

이러한 문제를 해결하기 위해, ATL에는 _ATL_MIN_CRT 매크로라는 해결책이 있습니다. _ATL_MIN_CRT 매크로를 활성화하려면 일반 속성 옵션 ATL에서 CRT 사용 최소화로 설정합니다. 이 매크로를 이용하면 CRT 시작 코드가 필요한 대부분의 CRT 함수를 다른 방법으로 구현할 수 있습니다.

단, _ATL_MIN_CRT 매크로를 사용한다고 해서 CRT의 함수가 전혀 필요 없게 되는 것은 아닙니다. 정상적으로 작동하기 위해 CRT 시작 코드를 필요로 하는 함수를 사용하면, 다음과 같은 링커 오류가 발생합니다.

LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main

사용자가 직접 _main을 구현해도 이러한 문제가 해결되지는 않습니다. 따라서, CRT 시작 코드가 필요한 함수를 사용하지 않거나 이미지의 시작 코드를 CRT에 정적 또는 동적으로 링크해야 합니다.

CRT 링크에 대한 자세한 내용은 ATL 프로젝트에서 CRT에 링크를 참조하십시오.

CRT 시작 코드를 식별하려면 다음 항목을 참조하십시오.