본문 바로가기

3.구현/VC++

[error]LNK2019 _main 외부기호 (_mainCRTStartup)

에러 메시지:

libc.lib(crt0.obj) : error LNK2019: _main 외부 기호(_mainCRTStartup 함수에서 참조)를 확인하지 못했습니다.

문제:

위 에서 보면 libc.lib에서 외부 참조에러가 있다는 의미이다. 즉 , libc.lib에서 crt0.obj라는 곳에서 _main 외부 기호를 찾는데 실패해서 에러가 발생했다는 것이다. main 보통 콘솔 모드에서 사용되는 것으로서 윈도우 프로그램 개발시 발생한다.
즉, 이 원인의 가장 큰 이유가 콘솔용 라이브러리를 윈도우에서 사용하는 경우 발생한다. 일단, MSDN에서 해당 함수가 콘솔용인지 윈도우용인지 확인하여 가급적이면 윈도우용을 사용하는 것이 좋다. 그렇다고 해서 사용할 수 없다는 것은 아니다. 아래와 같이 해주면 에러 없이 컴파일된다.

해결:

링크시 위 라이브러리를 강제적으로 배제 시킴.
아래 라이브리를 링크에 넣어주면 된다. 넣어주는 방법은
프로젝트 속성에서 디버그와 릴리즈를 각각 설정해준다.
항목중에 [linker]에서 입력>특정라이브리리 무시에 각각 다음을 추가해준다.

멀티 쓰레드 :

[디버그] libcmtd.lib, [릴리즈] libcmt.lib

싱글 쓰레드 :

[디버그] libcd.lib, [릴리즈] libc.lib

아니면 아래와 같이 직접 옵션을 넣어주면된다.

멀티쓰레드 :

[디버그]: /NODEFAULTLIB:"libcd.lib"

[릴리즈]: /NODEFAULTLIB:"libc.lib"

싱글쓰레드

[디버그]: /NODEFAULTLIB:"libcmtd.lib"

[릴리즈]: /NODEFAULTLIB:"libcmt.lib"

LIBCMTD.lib(crt0.obj) : error LNK2019: _main 외부 기호(_mainCRTStartup 함수에서 참조)를 확인하지 못했습니다

반응형