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이 붙는걸 확인했습니다.
출처 -