카테고리 없음
MSVC 의 빌드 플래그 관련
folcjin
2025. 6. 14. 12:00
728x90
반응형
MSVC에서는 프로그램을 컴파일할 때 어떤 종류의 CRT(C Runtime Library)를 사용할 것인지를 다음과 같은 플래그
주요 컴파일러 플래그 (CRT 종류 선택)
/MD | 멀티스레드 + 동적 CRT | 동적 (DLL) | 예 | ucrtbase.dll, msvcp140.dll, 등 |
/MDd | 디버그용 멀티스레드 + 동적 CRT | 동적 (DLL) | 예 | 위와 같지만 디버그 심볼 포함됨 |
/MT | 멀티스레드 + 정적 CRT | 정적 (라이브러리 내 포함) | 예 | 없음 (모두 실행 파일에 포함됨) |
/MTd | 디버그용 멀티스레드 + 정적 CRT | 정적 | 예 | 없음 |
어떤 플래그를 선택해야 할까?
- 라이브러리 배포가 필요 없는 독립 실행 파일이 필요 → /MT 또는 /MTd
- DLL을 통한 시스템 공유, 업데이트 지원을 원함 → /MD 또는 /MDd
- 디버그 빌드에서는 /MDd, /MTd, 릴리스 빌드에서는 /MD, /MT
- 라이브러리 배포가 필요 없는 독립 실행 파일이 필요 → /MT 또는 /MTd
- DLL을 통한 시스템 공유, 업데이트 지원을 원함 → /MD 또는 /MDd
- 디버그 빌드에서는 /MDd, /MTd, 릴리스 빌드에서는 /MD, /MT
주의: /MD와 /MT가 섞이면 링크 오류가 발생할 수 있으므로 프로젝트 전체에서 일관되게 사용해야 합니다.
ucrtbase.dll vs msvcrt.dll 차이점
Windows CRT에는 여러 버전이 있으며, 대표적으로 두 가지가 많이 사용
*. msvcrt.dll (Microsoft Visual C Runtime)
- 초기 Windows용 CRT (Windows 95~XP)
- 기본적인 C 함수 (printf, malloc 등) 제공
- Windows 시스템에 내장되어 있었음
- 문제점: 고정된 시스템 DLL이라 버전이 업데이트되지 않음 → 호환성 충돌 발생
*. ucrtbase.dll (Universal C Runtime)
- Windows 10 이후 표준 CRT
- Windows Update로 관리되는 범용 런타임
- printf, malloc, fopen 등 주요 함수는 여기로 이전됨
- MSVC 2015 이후 /MD 플래그를 사용하면 이 라이브러리가 참조됨
ucrtbase.dll | 표준 C 함수 처리 (printf, malloc 등) |
vcruntime140.dll | C++ 런타임 초기화/예외 처리 (new, terminate, RTTI 등) |
msvcp140.dll | STL 등 C++ 표준 라이브러리 기능 지원 |
MSVC 버전CRT 구성관련 DLL
Visual Studio 2010 | 전통적인 msvcrt | msvcrt100.dll 등 |
Visual Studio 2015~ | UCRT + VCRuntime 분리 구조 | ucrtbase.dll, vcruntime140.dll 등 |
/MD, /MT | CRT를 동적(DLL) 또는 정적(내부 포함)으로 사용할지 설정함 |
msvcrt.dll | Windows 내장된 오래된 CRT (더 이상 권장되지 않음) |
ucrtbase.dll | 최신 UCRT, MSVC 2015 이후 표준화된 CRT DLL |
혼용 금지 | /MT와 /MD 혼용 시 링크 오류 발생 가능 |
728x90
반응형
사업자 정보 표시펼치기/접기
사업자 등록번호 : -- | TEL : --