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

Posted by '김용환'
,