2011-04-29 2 views
3

모든 항목을 동적으로 링크 할 때 컴파일 및 작동이 잘되는 응용 프로그램이 있지만 정적 빌드가 필요할 때 컴파일되지 않습니다.정적으로 Windows 응용 프로그램을 빌드 할 때 오류가 발생했습니다.

Visual Studio 2010에서는 정적 라이브러리 옵션에서 MFC 사용을 설정했습니다.

나는이 오류를 얻을 할 때 : 확인되지 않은 외부 기호 (16) LIBCMT.LIB (wwincrt0.obj)

내가 추가로 LIBCMT.LIB를 추가하는 시도 @ _wWinMain : 1 오류 LNK2001가

오류 라이브러리,하지만 아무것도 변경되지 않습니다.

이 문제를 해결하는 방법에 대한 아이디어가 있으십니까?

답변

2

메시지가 나타나면 WinMain이라는 메시지가 나타납니다. 이는 프로젝트의 일부가 응용 프로그램으로 만들어지며 라이브러리가 아니라는 것을 의미합니다.

전체 재구성을 시도하고 모든 관련 옵션이 정적 라이브러리를 빌드하도록 설정되었는지 확인하십시오. libcmt.lib은 도서관이 아닌 최종 신청서에만 링크해야합니다.

+0

제이슨은 EXE를 빌드하고 있지만 DLL 버전이 아닌 런타임 및 MFC의 정적 버전을 포함한다고 생각합니다. –

1

프로그램을 빌드 할 때 유니 코드/MBCS, 다중/단일 스레드 및 기타 여러 가지를 설정하는 컴파일러 플래그가 있습니다. 하나의 플래그 집합과 다른 플래그를 가진 다른 소스를 사용하여 소스를 컴파일하면 그런 링커 오류가 자주 발생합니다.

모든 소스가 사용자 자신의 라이브러리를 포함하여 동일한 플래그를 사용하는지 확인하십시오.

링커가 LIBCMT.lib 라이브러리의 바이너리 wwincrt0.obj를 포함하고 있다는 특정 오류가 발생했습니다. wwincrt0.obj는 wWinMain() 함수를 가리키며 링커는 어디에서 찾을 수 있는지 알지 못합니다.

LIBCMT는 LIBC의 멀티 스레드 버전입니다. 당신은 그것들 중 하나에 링크 할 것이지만, 둘 다 결코 연결시키지 않을 것입니다.

wwincrt0은 코드를 시작할 CRT (C 런타임) 시작 코드의 와이드 (유니 코드) 버전입니다.

WinMain()은 Windows의 주 기능이며 wWinMain()은 WinMain()의 와이드 (유니 코드) 버전입니다.

일부 코드는 컴파일러 플래그/MT로 컴파일되고 일부는 다른 플래그 (/ MTd,/MD,/MDd,/LD 또는/LDd)로 컴파일됩니다.

내 두 번째 giess는/DUNICODE로 컴파일되고 일부는/DMBCS로 컴파일된다는 것입니다.