본문 바로가기
C++ 200제/코딩 IT 정보

Visual C++ 런타임 라이브러리 옵션 설정 (Runtime Library)

by vicddory 2018. 7. 1.

Visual C++ 런타임 라이브러리 옵션 설정 (Runtime Library)


Runtime Library는 프로그램을 실행하는 데 필요한 라이브러리입니다. Visual Studio는 여러 가지 런타임 라이브러리를 제공하고 있습니다.


Visual C++에서는 응용 프로그램을 만들 때, 사용하는 데 필요한 적절한 런타임 라이브러리를 지정해야 합니다.


프로젝트 속성 - C/C++ - 코드 생성 - 런타임 라이브러리


프로젝트 속성 - CC++ - 코드 생성 - 런타임 라이브러리[Runtime Library] 프로젝트 속성 - CC++ - 코드 생성 - 런타임 라이브러리


Visual Studio. NET 2003에서 제공하는 런타임 라이브러리에는 6종류가 있습니다.


다중 스레드 (/ MT)

다중 스레드 디버그 (/ MTd)

멀티 스레드 DLL (/ MD)

다중 스레드 디버그 DLL (/ MDd)

단일 스레드 (/ ML)

단일 스레드 디버그 (/ MLd)


컴파일러에 주는 옵션은 괄호 ()안에 삽입이 됩니다.


2005 버전 이후에는 단일 스레드가 빠지며, 이 옵션들의 의미는 다음과 같습니다.


Multi Thread(_MT) - 멀티 스레드를 지원하는 라이브러리를 링크

Debugging (_DEBUG) - 디버깅 정보를 보유하고 있는 라이브러리를 링크

DLL (_DLL) - 동적 링크 라이브러리를 사용. 지정되지 않은 경우, 런타임 라이브러리를 정적으로 링크


옵션마다 사용하는 라이브러리가 다른데, 더욱 자세한 내용은 아래의 링크를 참조하세요.


MSDN : /MD, /ML, /MT, /LD(런타임 라이브러리 사용)


런타임 라이브러리 지정이 필요한 경우

예를 들면, 다중 스레드 응용 프로그램을 작성할 때,


- 단일 스레드 구성에서 컴파일

- 단일 스레드 구성으로 컴파일된 라이브러리를 사용


위와 같은 옵션을 주면, 런타임 오류가 발생할 가능성이 높습니다. ARToolKitPlus나 IJG JPEG library 등 자체적인 컴파일이 필요한 라이브러리를 사용할 땐, 응용 프로그램의 런타임 라이브러리와 같은 설정을 해줄 필요가 있습니다.


Runtime Library C++[Runtime Library Visual C++]


라이브러리와 해당 응용 프로그램의 설정이 다를 경우

/MD 옵션으로 생성한 라이브러리를 /MT로 설정된 프로그램에서 사용하려 하면, LIBCMT.lib에서 오류가 발생합니다.


error LNK2005 : _exit는 이미 LIBCMTD.lib(crt0dat.obj)에 정의되어 있습니다.


/MT 옵션으로 생성한 라이브러리는 /MD 프로그램에서,


LINK : warning LNK4098 : defaultlib 'LIBCMT'는 다른 라이브러리의 사용과 경쟁하고 있습니다.


위와 같이 경고가 발생합니다.


debug에서 생성된 라이브러리를 release에서 사용해도 비슷한 경고창이 출력됩니다.


파일 크기 확인

외부 DLL과 컴파일을 하게 되면, 표준 라이브러리가 실행 파일 내부에서 링크가 되지 않기에 파일의 크기가 작아집니다.


libjpeg을 사용, 어떤 프로그램의 예 :


/ MT - 192KB

/ MTd - 416KB

/ MD - 104KB

/ MDd - 196KB


DLL 버전은 파일 크기가 큰 폭으로 축소되지만, 실행 파일만으로 단독 실행이 불가능하다는 단점이 있습니다.


Visual C++ 런타임 라이브러리 옵션 설정 (Runtime Library)

댓글