VC에서 자체 프로젝트에 대한 엔트리 포인트 지정

error LNK2001: unresolved external symbol _main
Tuesday, 11. July 2006, 04:50:15
note
외부 기호 오류 해결:main,_WinMain@16,__beginthreadex
MFC 프로젝트를 만들 때 MFC AppWizard 마법사를 사용하지 않고 프로젝트 매개 변수를 설정하지 않으면 컴파일할 때 많은 연결 오류가 발생합니다. 예를 들어 error LNK2001 오류입니다. 전형적인 오류 힌트는 다음과 같습니다.
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

1. Windows 서브시스템 설정 오류, 프롬프트:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main 

Windows 프로젝트는 Console 대신 Windows 서브시스템을 사용하도록 설정할 수 있습니다.
[Project] --> [settings] --> [Link] 등록 정보 페이지를 선택합니다.
프로젝트 옵션에서/subsystem:console를/subsystem:windows로 변경
2. Console 서브시스템 설정 오류, 프롬프트:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 

콘솔 항목은 Windows 대신 Console 서브시스템을 사용하려면 다음을 설정합니다.
[Project] --> [settings] --> [Link] 등록 정보 페이지를 선택합니다.
프로젝트 옵션에서/subsystem: 윈도우즈를/subsystem:console로 변경
3. 프로그램 포털 설정 오류, 프롬프트:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16  

일반적으로 MFC 프로젝트의 프로그램 입구 함수는 WinMain입니다. 프로젝트의 유니코드 버전을 컴파일하려면 프로그램 입구가 wWinMainCRTstartup으로 바뀌어야 하기 때문에 프로그램 입구를 다시 설정해야 합니다.
[Project] --> [settings] --> [Link] 등록 정보 페이지를 선택합니다.
Category에서 Output을 선택합니다.
Entry-point symbol에 wWinMainCRTstartup을 입력하면 됩니다.
이 문제는 Fox toolkit을 사용하여 인터페이스 프로그램을 개발할 때 프로그램이 실행될 때 그 뒤에 항상 Console 창이 나타납니다.포털을 지정한 후 다음과 같이 Console 창이 나타나지 않도록 설정할 수 있습니다.
comctl32.lib wsock32.lib kernel32.lib user32.lib gdi32.lib advapi32.lib shell32.lib mpr.lib   FOX-1.6.lib/entry:"mainCRTStartup"/subsystem:windows/profile/machine:I386/out:"Debug/a.exe"
4. 스레드 런타임 라이브러리 설정 오류, 프롬프트:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex   
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

MFC에서 멀티스레드 라이브러리를 사용하려면 다음 설정을 변경해야 하기 때문입니다.
[Project] --> [settings] --> [C/C++] 속성 페이지를 선택합니다.
Category에서 Code Generation을 선택합니다.
Use run-time library에서 Debug Multithreaded 또는 multithreaded 선택
여기서,
Single-Threaded 단일 스레드 정적 링크 라이브러리(release 버전)
멀티스레드 정적 링크 라이브러리(release 버전)
multithreaded DLL 다중 스레드 동적 링크 라이브러리(release 버전)
Debug Single-Threaded 단일 스레드 정적 링크 라이브러리(debug 버전)
Debug Multithreaded 다중 스레드 정적 링크 라이브러리(debug 버전)
Debug Multithreaded DLL 다중 스레드 동적 링크 라이브러리(debug 버전)
단일 스레드: 다중 스레드 호출이 필요 없는 경우 DOS 환경에서 사용
다중 스레드: 동시 실행 가능
정적 라이브러리: 라이브러리를 프로그램 링크에 직접 연결하여 MFC 라이브러리에서 실행할 수 있음
동적 라이브러리: 프로그램을 실행하려면 적절한 DLL 동적 라이브러리가 필요합니다.
release 버전: 정식 출시 시 사용
debug 버전: 디버그 단계 사용

좋은 웹페이지 즐겨찾기