본문으로 바로가기

error LNK2001: unresolved external symbol _main

category 개발언어/c++ 2016. 7. 18. 11:01
 

error LNK2001: unresolved external symbol _main

ATL COM Project를 빌드할 때 아래와 같은 LNK2001 에러가 발생하는 경우가 자주 있다.

Linking...
Creating library ReleaseMinSize/funcbridge.lib and object ReleaseMinSize/funcbridge.exp
LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
../bin/funcbridge.dll : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

이 링크 에러를 제거하려면 프로젝트 설정에서 _ATL_MIN_CRT 심벌을 없애야한다. 심벌의 이름으로 그 기능을 유추하면 C run-time library를 최소로 사용하게 하는 모드로 생각하기 쉽지만, 사실 이 심벌이 정의되면 CRT 시작 코드가 링크되는 것을 아예 막아버린다. 이렇게되면 약 25Kb가 절약되는데 CRT를 쓰는 프로젝트에서는 절약이고 뭐고 링크 자체가 안되므로 이 심벌을 제거해야 하는 것이다.

_ATL_MIN_CRT 심벌을 없애는 방법은 다음과 같다. Project Settings 윈도우를 표시하고 Settings For: 콤보 박스에서 Multiple Configurations 항목을 선택한다.

표시된 윈도우에서 Debug 항목을 제외하고 Release 빌드는 모두 선택한 후 OK 버튼을 누른다.

Project Settings 윈도우의 C/C++ 탭을 선택한 후, Category 콤보 박스에서 Preprocessor 항목을 선택하고 Preprocessor definitions: 항목에서 ATL_MIN_CRT 심벌을 삭제한다.

[출처] error LNK2001: unresolved external symbol _main|작성자 삐삐러브