본문 바로가기

개발/mfc

[mfc] DLL 없이 static library 사용, (컴파일 에러 C1189)

반응형

1. 설명

일반적으로 mfc 에서 프로젝트를 생성하면,

- "Use MFC in a Shared DLL" : 공유 DLL 을 사용 한다.

 

이렇고 만들어진 실행 파일을 실행 할때는 실행 파일만 필요 한게 아니고,

mfc42d.dll, mfco42d.dll, msvcirtd.dll, msvcrtd.dll  등 DLL 파일이 "system32" 폴더 아래에 있어야 합니다.

또는 컴파일 했던 Visual Sudio 버전에 맞는 RTL 를 설치 해야 한다.

 

즉 베포 할때 실행파일 및 RTL 도 같이 하고, 설치 하라는 둥 복사하라는 둥 귀찮다 ..

 

그래서 

-"Use MFC in a Static Library" 로 선택 하면

실행 파일 사이즈는 조금(5M 정도) 커지나.  뭐 더 달라고 하지 않아 편하다.

 

2. 방법

가. VS에서 프로젝트 가져 와서

나  ALT-F7 : Project-Property

 

Configuration Property - General - Project Default - Use of MFC 에서 

"Use MFC in a Static Library" 로 선택

 

그런데 이것만 하고 컴파일 하면 에러 생긴다.

fatal error C1189:
 #error :  Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version.
 Please #define _AFXDLL or do not use /MD[d]

라고,

 

 

다. 그래서 " /MD[d]"  를   "/MT[d]"  로 바꾸어 준다.

 

Configuration Property - C/C++ - Code Generation - Runtime Library 에서 

"Multi-threaded Debug ( /MTd )" 로 선택

 

그러면 디버그나 릴리즈 컴파일 할때 에러 없이 된다.

반응형