Study/C,C++

0. MingW

MeditT 2016. 12. 19. 03:09

 MinGW는 마이크로소프트 윈도로 포팅[각주:1]한 GNU 소프트웨어 도구 모음이다. mingw32로도 알려져 있다.


 MinGW는 윈도 API[각주:2]를 구현할 수 있는 헤더 파일[각주:3][각주:4]들을 가지고 있으며 이로써 개발자들이 "자유롭게 쓸 수 있는" 컴파일러[각주:5]GCC[각주:6]를 사용할 수 있다. 시그윈[각주:7] 포팅을 사용할 런타임[각주:8] 경우 컴파일한 프로그램 결과물이 유닉스 계통의 기능을 가상으로 구현하는 런타임에 의존하는 반면, MinGW의 경우 이러한 기능에 의존하지 않고 마이크로소프트 윈도 기반 프로그램들을 만들 수 있다.


 이 MinGW 프로젝트는 두 개의 기본 꾸러미를 관리하고 배포한다. 첫째로는 포팅된 GCC 컴파일러들은 윈도 명령 줄[각주:9]에서, 아니면 IDE[각주:10]에 통합된 채로 쓸 수 있다. 아니면 둘째로는 MSYS(minimal system의 약자)[각주:11]를 쓸 수도 있는데, 이것은 가벼운 유닉스 계통의 [각주:12] 환경을 제공한다. 이러한 환경은 rxvt[각주:13]autoconf[각주:14] 스크립트들을 실행하는 데에 충분한 POSIX 도구들이 집약되어 있다.

두 개의 꾸러미들은 원래 시그윈 일부의 forks였으며 forks는 네이티브 윈도 기능 덕에 더 포괄적인 유닉스 계통의 지원을 제공한다. 두 개의 꾸러미들은 자유 소프트웨어이다. Win32 헤더 파일들은 공용 도메인에 공개된다. 반면 GNU에서 포팅되는 프로그램들은 GNU 일반 공중 사용 허가서 하에서 사용할 수 있다. 완전한 MSYS 꾸러미와 개별 MinGW GNU 유틸리티들의 바이너리 파일들은 MinGW 사이트에서 내려 받을 수 있다.


역사

MinGW의 원래 이름은 mingw32 (Minimalist GNU for W32)이다.[2][3] 32비트 바이너리를 만드는 것으로 제한되는 것으로 생각될 수 있었기에 이를 피하고자 숫자 32는 제거되었다. 콜린 피터스는 1998년 초판을 만들었고, 당시 GCC시그윈 포팅만으로 이루어져 있었다.[4][5] Jan-Jaap van der Heijden는 GCC의 윈도우 네이티브 이식판을 만들었고 BinutilsMake를 추가하였다. Mumit Khan은 나중에 Anders Norlander의 윈도우 시스템 헤더들을 포함하여, 윈도우 특화 기능들을 패키지에 더 추가하였다. 2000년에 이 프로젝트는 소스포지로 이동되어 커뮤니티의 도움을 받아 개발에 집중하고 있다.[4][5]

MinGW는 2005년 9월 소스포지의 "이 달의 프로젝트"에 선정되었다.[5]

2013년 마지막 분기에, 새로운 프로젝트가 시작되었는데,[6] 그 이름은 MSYS2로, 32비트와 64비트 MinGW 패키지가 함께 포함되었다.

이름 붙이기

MinGW라는 이름은 Minimalist GNU for Windows의 줄임말이다. MinGW는 Mingw32라고 말할 수도 있는데 Win32 API용 헤더를 제공하기 때문이다.

MinGW를 발음하는 데에 정해진 기준은 없다. 흔히 "밍 위", "민기 더블유", "밍 더블유", 아니면 "민 그누"라고 발음한다. 간혹 발음 상의 편의성을 위해 "민지"로 발음하는 부류도 있다.

기능

MinGW와 MSYS의 결합은 작고 알찬 환경을 제공한다. 이로써 컴퓨터의 레지스트리나 파일의 항목을 남겨두지 않은 채 이동식 미디어로 불러들일 수 있다. 시그윈은 설치와 관리 면에서 더욱 복잡하다.

MinGW에서 응용 프로그램들을 크로스 컴파일할 수 있다. 시그윈 없이 윈도에서 돌아갈 소프트웨어를 컴파일하기 위해 개발자들이 MSYS의 윈도 설치판을 필요로 하지 않는다는 것을 말해 준다. 현재는 한때 지원하지 못하였던 윈도 비스타윈도 7과 완전히 호환된다.

시그윈과의 비교

MinGW는 1.3.3의 시그윈에서 분리된 버전이다. 시그윈과 MinGW 둘 다 유닉스 소프트웨어에서 마이크로소프트 윈도로 포팅되긴 했으나 그 둘의 목표는 다르다.

시그윈은 완전한 POSIX 레이어를 윈도 상에서 제공하는 데 초점을 두고 호환성이 필요한 곳에는 성능을 포기한다. 반면 MinGW는 자유 컴파일러와 도구 모음을 제공하는 데 힘을 쏟지만 성능을 우선한다.

시그윈과 달리, MinGW는 호환성 레이어 DLL을 요구하지 않으며, 그에 따른 런타임은 허가 라이선스 하에서 주어진다. MinGW가 POSIX API를 제공하지 않기 때문에, 시그윈으로 컴파일할 수 있는 유닉스 응용 프로그램들을 컴파일할 수 없다. 구체적으로 말해, 특정한 POSIX 기능을 요구하는 응용 프로그램들과 POSIX 환경에서 실행될 것으로 예정된 프로그램들을 말한다. SDL, wxWidgets, Qt, 또는 GTK+와 같은, 여러 플랫폼을 지원하는 라이브러리들을 사용하여 짜여진 응용 프로그램들은 보통 시그윈에서 하던 것처럼 MinGW 안에서 쉽게 컴파일할 수 있다.



출처:

http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&wr_id=17089

http://www.mingw.org/

https://ko.wikipedia.org/wiki/MinGW

https://kldp.org/node/134021

https://namu.wiki/w/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC


  1. 하드웨어의 특성을 반영하여 임베디드 운영체제를 정의하고 동작하도록 만드는 것. [본문으로]
  2. API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스 [본문으로]
  3. 컴파일러에 의해 다른 소스 파일에 자동으로 포함된 소스 코드의 파일 [본문으로]
  4. 헤더파일을 만드는 이유에 대해 먼저 말씀 드리겠습니다. .cpp 파일로 만들어진 오브젝트 파일에 있는 함수들의 내용을 다른 소스 파일에서 사용할 수 있도록 하기 위함입니다. A.cpp 파일에서 B.cpp 파일에 들어있는 함수나 클래스를 사용하기 위해서는 함수의 프로토 타입이나 클래스 선언 등의 정보가 필요합니다. (그래야 어떤 함수(또는 메소드)를 호출할때 인자값이 필요하고, 안필요하고와 리턴 타입을 알 수 있으니까요.) 그런 정보들을 파악하기 위해서 헤더 파일을 만들어서 관리합니다. 그리고, 헤더파일의 사용에 대해서 질문하셨는데.. 이는 라이브러리를 생각하시면 간단합니다. 라이브러리와 같은 것들은 cpp 파일을 제공하지 않는 경우가 많기 때문입니다. 그리고, 무엇보다 관리와 공유가 편하다는 장점이 있습니다. :) [본문으로]
  5. 어떤 프로그래밍 언어로 쓰여진 소스 파일을 다른 언어로 바꾸어주는 번역 프로그램. [본문으로]
  6. GNU 컴파일러 모음 [본문으로]
  7. 윈도우에서 유닉스 계열을 동작시키는 에뮬레이터. [본문으로]
  8. 실행.동작. [본문으로]
  9. 명령 프롬프트. cmd [본문으로]
  10. 통합 개발 환경(Integrated Development Environment). 코딩/디버그/컴파일을 한번에 처리 [본문으로]
  11. Gnu 유틸리티 모음 [본문으로]
  12. 운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램. Gui/CLI. 예)cmd [본문으로]
  13. 윈도→유닉스 에뮬레이터 [본문으로]
  14. 셸 스크립트를 만드는 도구 [본문으로]

'Study > C,C++' 카테고리의 다른 글

2. Hello, World!  (0) 2016.12.20
1. 기초부터  (1) 2016.12.20
0. Unix와 Linux  (0) 2016.12.20
0. GNU  (0) 2016.12.20
0. MingW  (0) 2016.12.20