GNU 컴파일러 모음

http://gcc.gnu.org **GNU 컴파일러 모음**(GNU Compiler Collection, 줄여서 **GCC**)는 GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러이다. 자유 소프트웨어 중에 가장 잘 알려진 것들 중 하나인 GCC는 원래 C만을 지원했던 컴파일러로 이름도 "GNU C 컴파일러"였다. 이러한 까닭에 현재에도 GCC는 GNU 컴파일러 모음의 일부인 **GNU C 컴파일러**(GNU C Compiler)의 줄임말로 쓰이는 편이다. 그러나 나중에 C++, 자바, 포트란, 에이다 등 여러 언어를 컴파일할 수 있게 되면서 현재의 이름으로 바뀌게 되었다.
# 개요
GCC는 리처드 스톨만이 1987년 GNU 프로젝트의 컴파일러로 작성했다. GNU 프로젝트에 컴파일러가 없었기 때문에 이 개발은 자유 소프트웨어 재단이 후원하였다. 1997년 개발 과정은 공개되었으며 속도 또한 빨라졌다. 1999년 첫 버전이 나왔다. 현재 GCC는 전 세계적으로 관리되고 있으며 다양한 중앙 처리 장치를 처리할 수 있게 되었다. GNU 시스템의 공식 컴파일러이므로 GCC는 많은 컴파일러와 운영 체제를 만드는 데 사용되었다. 한편, 시스템 네이티브 컴파일러를 사용했을 때 비해서 GCC를 사용하면 같은 파서로 코드를 처리하므로 이식성을 향상시킬 수 있다. GCC는 상용 컴파일러에 비해서 느린 코드를 생성했지만 최근 많이 개선되었다.
# 지원 프로그래밍 언어
4.6 이후의 표준 컴파일러 릴리즈에는 C (`gcc`), C++ (`g++`), 오브젝티브 C, 오브젝티브 C++, 포트란 (`gfortran`), 자바 (`gcj`), 에이다 (GNAT), 고 (`gccgo`)를 위한 프론트엔드가 포함되어 있다."GCC Front Ends" url=https://web.archive.org/web/20140209123026/http://gcc.gnu.org/frontends.html, gnu.org, Retrieved November 25, 2011. 또한 이용은 가능하지만 표준에는 포함되지 않은 것으로 파스칼 (`gpc`), 머큐리, Modula-2, Modula-3, PL/I, D (`gdc`),accessdate=3 July 2010url=http://bitbucket.org/goshawk/gdc/ VHDL (`ghdl`)가 있다. 잘 알려진 병렬 언어 확장 OpenMP도 지원한다. 포트란 프론트엔드는 포트란 77만 지원했던 버전 4.0 이전까지 `g77`였다. 새로운 버전에서 `g77`는 포트란 2003의 일부와 포트란 95를 지원하는 새로운 `gfortran` 프론트엔드를 선호하게 되면서 지원이 중단되었다.url-status=dead 나중의 포트란 표준이 F77 표준을 포함하면서 표준 호환 F77 코드가 표준 호환 F90/95 코드가 되어 gfortran에서 문제 없이 컴파일이 가능하다. CHILL을 위한 프론트엔드는 유지 보수 부족으로 개발이 중단되었다.url=https://web.archive.org/web/20120305214233/http://gcc.gnu.org/ml/gcc-patches/2002-04/msg00887.html [PATCH Remove chill], gcc.gnu.org, Retrieved July 29, 2010. 일부 실험적인 브랜치들은 추가적인 언어들을 지원하기도 하는데, 이를테면 GCC UPC 컴파일러가 있다.웹 인용 |url=http://www.gccupc.org/ |제목=GCC UPC (GCC Unified Parallel C) | http://www.gccupc.org/ |publisher=http://www.gccupc.org/
# 지원 아키텍처
버전 4.3을 기준으로 GCC는 다음의 프로세서 계열을 대상으로 한다: small=no * 알파 * ARM * AVR * 블랙핀 * Epiphany (GCC 4.8) * H8/300 * HC12 * IA-32 (x86) * IA-64 (인텔 아이테니엄) * MIPS * 모토로라 68000 * PA-RISC * PDP-11 * PowerPC * R8C / M16C / M32C * SPARC * SPU * SuperH * 시스템/390 / z시리즈 * VAX * x86-64 참고 자료 끝 표준 릴리즈에서 지원되는, 위보다 잘 알려지지 않은 프로세서는 다음을 포함한다: small=no * 68HC11 * A29K * CR16 * C6x * D30V * DSP16xx * ETRAX CRIS * FR-30 * FR-V * 인텔 i960 * IP2000 * M32R * MCORE * MIL-STD-1750A * MMIX * MN10200 * MN10300 * 모토로라 88000 * NS32K * ROMP * RL78 * Stormy16 * V850 * Xtensa 참고 자료 끝 FSF 버전과는 별개로 GCC 버전이 지원하고 있는 추가 프로세서들은 다음과 같다: small=no * Cortus APS3 * ARC * AVR32 * C166, C167 * D10V * EISC * eSi-RISC * 헥사곤url-status=dead * LatticeMico32 * LatticeMico8 * MeP * MicroBlaze * 모토로라 6809 * MSP430 * NEC SX 아키텍처url=http://code.google.com/p/sx-gcc/ * Nios II, Nios * 오픈RISC * PDP-10 * PIC24/dsPIC * PIC32 * 프로펠러 * 시스템/370 * TIGCC (m68k의 변종) * TriCore * Z8000 참고 자료 끝 gcj 자바 컴파일러는 순수 기계어 아키텍처나 자바 가상 머신의 자바 바이트코드만을 대상으로 할 수 있다.url-status = dead 새로운 플랫폼으로 GCC의 대상으로 변경할 때에는 bootstrap이 자주 쓰인다.
# 호환 IDE
리눅스 및 일부 운영 체제용으로 개발된 대부분의 통합 개발 환경은 GCC를 지원한다. 이를테면 다음을 포함한다. * Anjuta * Code::Blocks * 코드라이트(CodeLite) * Dev-C++ * 이클립스 * geany * KDevelop * NetBeans * Qt 크리에이터 * Xcode (엑스코드 4.1.0까지만 지원. 그 뒤에는 llvm-gcc라는 프론트엔드가 대신한다.)
# 버전 역사
multicol {| class="wikitable sortable" |- ! 버전 ! 출시일GCC Releases, gnu.org. Accessed on line Mar. 26, 2014.GCC Development Plan, gnu.org. Accessed on line Mar. 26, 2014. |- | 7.1.0 ||2017-05-02 |- | 6.3.0 ||2016-12-21 |- | 6.2.0 ||2016-08-22 |- | 4.9.4 ||2016-08-03 |- | 5.4.0 ||2016-06-03 |- | 6.1.0 ||2016-04-27 |- | 5.3.0 ||2015-12-04 |- | 5.2.0 ||2015-07-16 |- | 4.9.3 ||2015-06-26 |- | 4.8.5 ||2015-06-23 |- | 5.1.0 ||2015-04-22 |- | 5.0.0 ||2014-12-23 |- | 4.8.4 ||2014-12-19 |- | 4.9.2 ||2014-10-30 |- | 4.9.1 ||2014-07-16 |- | 4.7.4 ||2014-06-12 |- | 4.8.3 ||2014-05-22 |- | 4.9.0 ||2014-04-22 |- | 4.8.2 ||2013-10-16 |- | 4.8.1 ||2013-05-31 |- | 4.6.4 ||2013-04-12 |- | 4.7.3 ||2013-04-11 |- | 4.8.0 ||2013-03-22 |- | 4.7.2 ||2012-09-20 |- | 4.5.4 ||2012-07-02 |- | 4.7.1 ||2012-06-14 |- | 4.7.0 ||2012-03-22 |- | 4.4.7 ||2012-03-13 |- | 4.6.3 ||2012-03-01 |- | 4.6.2 ||2011-10-26 |- | 4.6.1 ||2011-06-27 |- | 4.3.6 ||2011-06-27 |- | 4.5.3 ||2011-04-28 |- | 4.4.6 ||2011-04-16 |- | 4.6.0 ||2011-03-25Support added for the Go language. |- | 4.5.2 ||2010-12-16 |- | 4.4.5 ||2010-10-01 |- | 4.5.1 ||2010-07-31 |- | 4.3.5 ||2010-05-22 |- | 4.4.4 ||2010-04-29 |- | 4.5.0 ||2010-04-14 |- | 4.4.3 ||2010-01-21 |- | 4.4.2 ||2009-10-15 |- | 4.3.4 ||2009-08-04 |- | 4.4.1 ||2009-07-22 |- | 4.4.0 ||2009-04-21 |- | 4.3.3 ||2009-01-24 |- | 4.3.2 ||2008-08-27 |- | 4.3.1 ||2008-06-06 |- | 4.2.4 ||2008-05-19 |- | 4.3.0 ||2008-03-05 |- | 4.2.3 ||2008-02-01 |- | 4.2.2 ||2007-10-07 |- | 4.2.1 ||2007-07-18 |- | 4.2.0 ||2007-05-13 |- | 4.1.2 ||2007-02-13 |- | 4.0.4 ||2007-01-31 |- | 4.1.1 ||2006-05-24 |- | 4.0.3 ||2006-03-10 |- | 3.4.6 ||2006-03-06 |- | 4.1.0 ||2006-02-28 |- | 3.4.5 ||2005-11-30 |- | 4.0.2 ||2005-09-28 |- | 4.0.1 ||2005-07-07 |- | 3.4.4 ||2005-05-18 |- | 3.3.6 ||2005-05-03 |- | 4.0.0 ||2005-04-20Fortran front end changed from g77 to gfortran. |- | 3.4.3 ||2004-11-04 |- | 3.3.5 ||2004-09-30 |- | 3.4.2 ||2004-09-06 |- | 3.4.1 ||2004-07-01 |- | 3.3.4 ||2004-05-31 |- | 3.4.0 ||2004-04-18 |- | 3.3.3 ||2004-02-14 |- | 3.3.2 ||2003-10-17 |- | 3.3.1 ||2003-08-08 |- | 3.3 ||2003-05-13 |- | 3.2.3 ||2003-04-22 |- | 3.2.2 ||2003-02-05 |- | 3.2.1 ||2002-11-19 |- | 3.2 ||2002-08-14 |- | 3.1.1 ||2002-07-25 |- | 3.1 ||2002-05-15Added Ada compiler (gnat). |- | 3.0.4 ||2002-02-20 |- | 3.0.3 ||2001-12-20 |- | 3.0.2 ||2001-10-25 |- | 3.0.1 ||2001-08-20 |- | 3.0 ||2001-06-18CHILL compiler removed.Downloading GCC, gnu.org, archived by archive.org as of November 20, 2001. Accessed on line March 26, 2014. |- | 2.95.3 ||2001-03-16 |- | 2.95.2 ||1999-10-24 |- | 2.95.1 ||1999-08-19 |- | 2.95 ||1999-07-31Included front ends for C, C++, Objective C, CHILL, Fortran (g77), and Java (gcj). |- | egcs 1.1.2 ||1999-03-15 |- | egcs 1.1.1 ||1998-12-01 |- | egcs 1.1 ||1998-09-03 |- | egcs 1.0.3 ||1998-05-15 |- | egcs 1.0.2 ||1998-03-16 |- | 2.8.1 ||1998-03-02 |- | 2.8.0 ||1998-01-07 |- | egcs 1.0.1 ||1998-01-06 |- | egcs 1.0 ||1997-12-03Added FORTRAN front end (g77). However, g77 was not included with releases 2.8.0 or 2.8.1. |- | 2.7.2.3||1997-08-22 |- | 2.7.2.2||1997-01-29 |} multicol-break {| class="wikitable sortable" |- ! 버전 ! 출시일 |- | 2.7.2.1||1996-06-29 |- | 2.7.2||1995-11-26 |- | 2.7.1||1995-11-12 |- | 2.7.0||1995-06-16 |- | 2.6.3||1994-11-30 |- | 2.6.2||1994-11-12 |- | 2.6.1||1994-11-01 |- | 2.6.0||1994-07-14 |- | 2.5.8||1994-01-24 |- | 2.5.7||1993-12-12 |- | 2.5.6||1993-12-03 |- | 2.5.5||1993-11-27 |- | 2.5.4||1993-11-16 |- | 2.5.3||1993-11-11 |- | 2.5.2||1993-11-01 |- | 2.5.1||1993-10-31 |- | 2.5.0||1993-10-22 |- | 2.4.5||1993-06-20 |- | 2.4.4||1993-06-19 |- | 2.4.3||1993-06-01 |- | 2.4.2||1993-05-31 |- | 2.4.1||1993-05-26 |- | 2.4.0||1993-05-17 |- | 2.3.3||1992-12-26 |- | 2.3.2||1992-11-27 |- | 2.3.1||1992-11-01 |- | 2.3||1992-10-31 |- | 2.2.2||1992-06-14 |- | 2.2.1||1992-06-09 |- | 2.2||1992-06-08 |- | 2.1||1992-03-24 |- | 2.0||1992-02-22Supported C, C++, and Objective C. Prior to this the C++ compiler was released separately from the C compiler. |- | g++ 1.42.0||1992-09-20 |- | 1.42||1992-09-20 |- | 1.41||1992-08-27 |- | g++ 1.41.0||1992-07-13 |- | g++ 1.40.3||1991-10-19 |- | 1.40||1991-06-01 |- | g++ 1.39.1||1991-05-04 |- | 1.39||1991-01-16 |- | 1.38||1990-12-21 |- | g++ 1.37.1||1990-03-01 |- | g++ 1.37.0||1990-02-28 |- | 1.37.1||1990-02-21 |- | 1.37||1990-02-11 |- | g++ 1.36.4||1990-01-30 |- | g++ 1.36.3||1990-01-16 |- | 1.36||1989-09-24 |- | 1.35||1989-04-26 |- | 1.34||1989-02-23 |- | 1.33||1989-02-01 |- | 1.32||1988-12-21 |- | 1.31||1988-11-19 |- | 1.30||1988-10-13 |- | 1.29||1988-10-06 |- | 1.28||1988-09-14 |- | 1.27||1988-09-05 |- | 1.26||1988-08-18 |- | 1.25||1988-08-03 |- | 1.24||1988-07-02 |- | 1.23||1988-06-26 |- | 1.22||1988-05-22 |- | 1.21||1988-05-01 |- | 1.20||1988-04-19 |- | 1.19||1988-03-29 |- | 1.18||1988-02-04 |- | 1.17||1988-01-09 |- | 1.16||1987-12-19 |- | g++ 1.15.3||1987-12-18 |- | 1.15||1987-11-28 |- | 1.14||1987-11-06 |- | 1.13||1987-10-12 |- | 1.12||1987-10-03 |- | 1.11||1987-09-05 |- | 1.10||1987-08-22 |- | 1.9||1987-08-18 |- | 1.8||1987-08-10 |- | 1.7||1987-07-21 |- | 1.6||1987-07-02 |- | 1.5||1987-06-18 |- | 1.4||1987-06-13 |- | 1.3||1987-06-10 |- | 1.2||1987-06-01 |- | 1.1||1987-05-24 |- | 1.0||1987-05-23 |- | 0.9||1987-03-22 |} multicol-end
# 참고 자료
* Richard M. Stallman: *Using and Porting the GNU Compiler Collection*, Free Software Foundation, * Richard M. Stallman: *Using Gcc: The Gnu Compiler Collection Reference*, Free Software Foundation, * Brian J. Gough: *An Introduction to GCC*, Network Theory Ltd.,