이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

Tool 사용법/MinGW

MinGW 리서치

이쿠우우 2022. 1. 20. 16:06
반응형

 

 

MinGW

 

컴파일러 (Compiler)

개발자가 C/C++, GoLang등 프로그램 언어로 작성한 것은 컴퓨터가 이해하지 못함.
컴퓨터가 이를 이해하기 위해서는 컴파일러를 통해 프로그램 언어를 기계어로 변환하는 작업을 거쳐야함.
이러한 컴파일러는 종류가 다양함.
대표적으로 GCC, G++, MSVC 등이 있음.
이 중 MinGW 이해를 위해 GCC와 MSVC에 컴파일러를 위주로 설명하겠음.
 
 
 

GCC란?

GNU Compiler Collection의 약자.
GNU 프로젝트의 오픈소스 컴파일러 컬렉션이고 
본래 UNIX/LINUX 개열 OS의 컴파일러임.
과거에는 C언어 전용 컴파일러 전용이여서 GNU C Compiler Collection 약자였는데
2.9 version부터 C언어 이외에도 C++, Objective-C, Fortran, Go, Ada 등의 다양한 언어를 지원하게 되면서
GNU Compiler Collection로 이름이 변경됨.
개발기간이 오래되서 그만큼 성능 및 최적화가 잘 되어있고, 컴파일러 중에서 표준을 잘 지키는 편임.
License : GPL 
 

GNU란?

GNU는 유닉스가 아니다'(Gnu is Not Unix)를 의미하는 재귀적 약어로
유닉스와 완벽하게 호환하는 소프트웨어 시스템이며 사용 가능한 모든 이가 자유롭게 사용할 수 있도록 작성한 것.
이러한 도구를 이용해 사용자는 파일을 복사하거나 지우는 아주 일상적인 작업부터, 
프로그램 작성과 컴파일, 여러가지 종류의 문서 편집에 이르기까지 다양한 작업을 할 수 있게 됨.
 
 
 

MSVC (Microsoft Visual C++)

일반적으로 Windows OS에서 개발을 입문했다면 가장 많이 사용하는 IDE가 Visual Studio임.
Visual Studio는 1997년부터 현재까지 마이크로소프트가 배포 및 판매 중인 통합 개발 환경이자 통합 패키지임.
Visual Studio는 개발 편의성을 제공하는 IDE역할도 하지만 동시에 Compiler 역할도 수행함.
Viual Studio에 default로 탑재되는 컴파일러는 MSVC(Mircosoft Visual C++) 임.
MSVC는 약자 그대로 C언어 컴파일러에 해당하진 않고 C++ 컴파일러에 속함.
하지만 Visual Studio에서 C언어도 컴파일 할 수 있는데 그 이유는
C++은 C언어 문법을 포함하기에 C 컴파일할 수 있음. 
하지만 C++는 C를 완전히 포함하지 않음.
MS 공식 사이트에도 MSVC의 단점으로  C언어 사양(C99, C11, C18)의 업데이트 지원이 부족한 점을 명시하고 있음.
즉 MSVC는 애초에 C언어를 지원하지 않음.
또 MinGW는 C++11 thread 지원 문제가 있음.
MinGW에서 C++11의 thread를 정식으로 지원하지 않음.
해당 문제점을 해결하기 위해 mingw-std-threads 프로젝트만 있지만 Header를 교체해줘야하는 작업이 필요함.
License MS-EULA
 
 

GCC와 MSVC 차이점.

위에서 설명한 바와 같이 GCC와 MSVC는 호환되는 OS부터 다음.
GCC = UNIX/LINUX 개열 OS의 컴파일러.
MSVC = Windows OS 컴파일러.
 
또한 특정 API의 경우 컴파일러에 의존됨.
EX)
 
 
spdlog 
IOPC 관련 함수
GCC
지원
미지원
MSVC
미지원
지원
하지만 Cross Compile 등과 같이 OS 호환 개발작업을 진행할 시에
컴파일러가 OS에 의존되면 작업이 어려워짐
GCC 또는 MSVC 컴파일러 중 하나로 UNIX/LINUX/Windows가 지원되야하는데
GCC의 경우 MSVC보다 컴파일러 표준을 잘 지키고 개발기간도 오래되어 
모든 OS에서 GCC 컴파일러로 개발되는 방향을 추천하고 있음.
이에 따라 GCC를 Windows에서 동작하게 하는 프로젝트로 MinGW, Cygwin이 있음.

 

Cygwin

Cygwin은 POSIX 환경을 windows에 구현해서 
운영체제와 실행 파일 사이의 가상머신이 동작함.
가상머신은 Windows OS에 없는 유닉스 계열 운영체제가 제공하는 기능들을 제공하는 역할을 함.
리눅스 용으로 작성된 코드를 별 무리 없이 Windows OS에서 컴파일 할 수 있지만,
가상 환경인 만큼, 프로그램이 무겁고 실행 속도가 느리며, libcygwin.dll 라이브러리에 의존함.
 
Cygwin 링크 https://www.cygwin.com/
 

POSIX란?

Portable Operating System Interface의 줄임말.
Unix, macOS가 따르고 있는 CLI 표준
 
 

MinGW란?

Minimalist GNU for Windows의 줄임말.
GCC for windows로 Windows에서 GCC를 사용할 수 있도록 해주는 Tool임.
Cygwin 프로젝트에서 분리되어 나온 것으로 Cygwin의 단점을 제거해서 가볍고 빠름.
대표적으로 Cygwin에서 사용했던 POSIX 환경을 제거해서 Windows 환경과 네이티브로 연결됨.
Cygwin에 비교한 단점으로는 GCC가 제공하는 일부 라이브러리(특히 POSIX 표준)를 사용할 수 없음.
License : GPL 
 
 
 

 
 
참고

 

반응형

'Tool 사용법 > MinGW' 카테고리의 다른 글

MinGW 사용  (0) 2022.01.20