multithreaded로 컴파일되는 것을 multithreaded dll 로 바꾸어도 컴파일이나 링크 모두 잘됩니다.
multithreaded dll을 multithreaded 로 바꾸면 에러가 나는경우가 생기는데...
fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
_AFXDLL 을 정의해놓고 세팅은 왜 이따위로 했는냐 이런 의미인거 같은데... 정확하게 원리가 어떻게 되는것인지
/MD, /MT의 컴파일 옵션의 차이점은 컴파일 시 .obj 파일에 어떤 c runtime library를 삽입 하느냐의 차이입니다.
◆ /MD compile option (multithreaded dll)
c runtime library(MSVCPRT.LIB)를 컴파일 하는 .cpp파일의 .obj 파일에 삽입하여,
external symbols와 MSVCP71.dll을 통하여 동적 연결(dinamic link)할 수 있게 하고,
MSVCPRT.LIB는 MSVCP71.dll을 사용할 수 있도록 구성됩니다.
◆ /MT compile option (multithreaded)
c runtime library(LIBCPMT.LIB)를 컴파일 하는 .cpp파일의 .obj 파일에 삽입하여,
external symbols와 정적 연결(static link)를 하게 합니다.
MFC의 APP wizard를 통하여 Project를 생성 시,
MFC를 static library를 사용하게 만들 경우 /MT compile option이 붙고
shared dll 모드로 만들 경우 /MD compile option이 붙는걸 확인했습니다.
'c++' 카테고리의 다른 글
비주얼 스튜디오 팀 파운데이션 출시 (0) | 2006.07.20 |
---|---|
<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> SDK 일반 용어 (0) | 2006.04.19 |
CString Management (0) | 2006.01.07 |
vc++ 팁 (0) | 2005.11.08 |
Microsoft Visual Studio and C++ (0) | 2005.11.05 |