본문 바로가기

Programming/Windows Visual C++

/MT /MD 옵션의 차이

/MT와 /MD의 차이
/MTd는 /MT의 디버그버전. 마찬가지로 /MDd는 /MD의 디버그 버전.
/MT: 내가 만드는 응용 프로그램이 C런타임 라이브러리의 기능을 사용할 때 static link version인 LIBCMT.lib를 사용하여 프로그램이 빌드된다는 뜻.
/MD: 내가 만드는 응용 프로그램이 C런타임 라이브러리의 기능을 사용할 때 dynamic link version인 MSVCRT.lib를 사용하여 프로그램이 빌드된다는 뜻.
즉 내가 dll을 만들든 .lib를 만들든 그냥 .exe를 만들든 이 옵션은 아무거나 골라도 상관이 없음.
문제는 .lib를 가져다가 쓰는 경우 이 /MT /MD옵션이 맞지 않으면 'XXX is already defined in YYY’같은 에러가 뜨면서 컴파일이 안되는 현상. 이 때는 /MT나 /MD를 통일시켜줘야 한다.
MFC의 경우 라이브러리가 /MT를 사용하기 때문에 내가 /MD에 놓고 프로그램을 만들면 컴파일이 안된다.
즉 간혹 내가 컴파일 할 수 없는 라이브러리가 /MD로 컴파일 되어 있는 경우 내 프로젝트도 /MD로 컴파일을 해야하고 이 때는 MFC라이브러리를 쓸 수 없다.
내가 라이브러리 컴파일이 가능하다면 /MD든 /MT든 상관없지만 /MT를 쓰는게 마음건강에 좋다.