GNU 컴파일러 컬렉션
GNU Compiler Collection![]() | |
![]() 자체 소스 코드를 컴파일하는 GCC 10.2 스크린샷 | |
원저작자 | 리처드 스톨먼 |
---|---|
개발자 | GNU 프로젝트 |
초기 릴리즈 | 1987년 3월 22일, [1] | 전(
안정된 릴리스 | 2022년 5월 12.1일[2] / 6일 |
저장소 | |
기입처 | C, C++[3] |
운영 체제 | 크로스 플랫폼 |
플랫폼 | GNU 및 기타 다수 |
크기 | 최대 1500만[4] LOC |
이용가능기간: | 영어 |
유형 | 컴파일러 |
면허증. | GCC 런타임라이브러리의[5] 예외에 의한 GPLv3+ |
웹 사이트 | gcc |
GNU 컴파일러 컬렉션(GCC)은 다양한 프로그래밍 언어, 하드웨어 아키텍처 및 운영 체제를 지원하는 GNU 프로젝트에 의해 생산된 최적화 컴파일러입니다.Free Software Foundation(FSF)은 GNU General Public License(GNU GPL)에 따라 GCC를 자유 소프트웨어로 배포합니다.GCC는 GNU 툴체인의 주요 컴포넌트이며 GNU 및 Linux 커널과 관련된 대부분의 프로젝트의 표준 컴파일러입니다.2019년 약 1500만 줄의 코드를 가진 GCC는 현존하는 [4]가장 큰 무료 프로그램 중 하나이다.툴로서, 또 하나의 예로서 프리 소프트웨어의 성장에 있어서 중요한 역할을 완수해 왔습니다.
1987년 Richard Stallman에 의해 처음 출시되었을 때 GCC 1.0은 C 프로그래밍 [1]언어만을 처리했기 때문에 GNU C 컴파일러로 명명되었습니다.그것은 그 해 12월에 C++ 컴파일로 확장되었다.프런트 엔드는 나중에 Objective-C, Objective-C++, Fortran, Ada, D, Go [6]등을 위해 개발되었습니다.OpenMP와 OpenACC 사양은 C 및 C++ [7][8]컴파일러에서도 지원됩니다.
GCC는 다른 컴파일러보다 더 많은 플랫폼과 명령어셋 아키텍처로 이식되어 자유 소프트웨어 및 독점 소프트웨어 개발에 도구로서 널리 도입되고 있습니다.GCC는 ARM 기반 및 Power ISA 기반 칩을 포함한 많은 임베디드 시스템에도 사용할 수 있습니다.
GCC는 GNU 운영체제의 공식 컴파일러일 뿐만 아니라 대부분의 Linux 디스트리뷰션을 포함한 많은 현대 유닉스 계열 컴퓨터 운영체제에 표준 컴파일러로 채택되어 왔다.대부분의 BSD 패밀리 운영 체제도 출시 직후 GCC로 전환되었지만, 그 이후 FreeBSD, OpenBSD 및 Apple macOS는 주로 라이센스상의 [10][11][12]이유로 Clang [9]컴파일러로 전환되었습니다.GCC는 또한 Windows, Android, iOS, Solaris, HP-UX, AIX 및 [13]DOS용 코드를 컴파일할 수 있습니다.
역사
1983년 말, GNU 운영체제를 부트스트랩하기 위한 노력의 일환으로 리처드 스톨먼은 Andrew S에게 물었다. 암스테르담 컴파일러 키트(Free University Compiler Kit라고도 함)의 저자인 Tanenbaum은 이 소프트웨어를 GNU용으로 사용할 수 있도록 허락을 받았습니다.Tanenbaum이 컴파일러는 무료가 아니며 University만이 무료라고 그에게 조언하자 Stallman은 다른 [14]컴파일러에서 작업하기로 결정했습니다.그의 초기 계획은 Lawrence Livermore National Laboratory의 기존 컴파일러를 Pastel에서 C로 수정하는 것이었다.[15][16]Stallman은 Livermore 컴파일러를 위해 새로운 C 프런트 엔드를 작성했지만 64KB밖에 되지 않는 68000 Unix 시스템에서는 불가능한 메가바이트의 스택스페이스가 필요하다는 것을 깨닫고 새로운 컴파일러를 처음부터 [15]작성해야 한다는 결론을 내렸습니다.파스텔 컴파일러 코드 중 어느 것도 GCC로 끝나지 않았지만 Stallman은 자신이 [15][17]작성한 C 프런트 엔드를 사용했다.
GCC먼저 3월 22일, 1987, 사용 가능한 FTP에 의해 MIT.[18]스톨만의 작가 목록에 등재된지만 파서의 부분, RTLgener"에 대한 중간 언어, 폴 루빈은 전처리기의 대부분의 서면의와 Leonard타워로 RTL을 사용하는 아이디어에 기여한 잭 데이비슨과 크리스토퍼 Fraser포함한 다른 것들을 언급했다 석방되었다.ator, RTL 정의 및 Vax 머신 [19]설명에 대해 설명합니다.Peter H. Salus에 의해 "첫 번째 무료 소프트웨어 히트"로 묘사된 GNU 컴파일러는 Sun Microsystems가 운영체제에서 개발 툴을 분리하여 이전 번들에 비해 더 높은 가격에 판매했을 때 출시되었으며, 이로 인해 많은 Sun 사용자가 벤더의 툴 대신 GCC를 구입하거나 다운로드하게 되었습니다.Stallman은 GNU Emacs를 주요 프로젝트로 생각했지만, 1990년까지 GCC는 13개의 컴퓨터 아키텍처를 지원했고, 여러 벤더의 컴파일러를 능가했으며, 여러 [21]회사에서 상업적으로 사용되었습니다.[20]
EGCS 포크
GCC가 GPL로 라이선스되었기 때문에 다른 방향(특히 C 이외의 언어용 쓰기 인터페이스)에서 작업하기를 원하는 프로그래머는 소스 코드 배포 요건을 포함한 GPL의 조건을 충족한다면 자유롭게 컴파일러의 포크를 개발할 수 있었습니다.그러나 여러 개의 포크가 비효율적이고 다루기 어려운 것으로 판명되었으며, GCC 프로젝트가 [22]새로운 기능보다 안정성을 선호했기 때문에 공식적인 GCC 프로젝트에서 작업을 수락하는 데 어려움이 컸습니다.FSF는 GCC 2.x(1992년 이후 개발)의 공식 버전에 추가된 것에 대해 매우 면밀한 통제를 유지하여 Eric S에서 GCC가 "catedeal" 개발 모델의 한 예로 사용되었다. 레이먼드의 에세이 '성당과 바자'
1997년, 한 그룹의 개발자들이 실험용/향상된 [22][17]GNU 컴파일러 시스템(EGCS)을 결성하여 여러 실험용 포크를 하나의 프로젝트로 병합하였다.합병의 기초는 GCC의 개발 스냅숏(2.7.2 전후로 촬영되어 이후 2.8.1 릴리스까지)이었다.합병에는 G77(Fortran), PGCC(P5 Pentium 최적화 GCC),[17] 많은 C++ 개선, 많은 새로운 아키텍처와 운영체제 변종 [23]등이 포함됩니다.
두 프로젝트가 서로의 변화를 밀접하게 따라가는 동안 EGCS 개발은 상당히 활발해졌고 FSF는 공식적으로 GCC 2.x 컴파일러 개발을 중단하고 EGCS를 GCC의 공식 버전으로 축복하며 1999년 4월에 EGCS 프로젝트를 GCC 유지자로 지정했다.1999년 7월 GCC 2.95가 발표되면서 두 프로젝트는 다시 [24][17]통합되었습니다.GCC는 운영위원회의 [25]지휘 아래 전 세계에서 온 다양한 프로그래머 그룹에 의해 유지되고 있습니다.
GCC 3(2002)에서는 [26]유지보수가 부족하기 때문에 CHIL의 프론트 엔드를 삭제했습니다.
버전 4.0 이전 Fortran 프론트 엔드는g77
이는 Fortran 77만을 지원했지만 나중에 Fortran 95와 [27][28]Fortran 2003 및 Fortran 2008의 많은 부분을 지원하는 새로운 GNU Fortran 프런트 엔드를 위해 삭제되었습니다.
버전 4.8 에서는, GCC 는 [29]C++ 로 실장되어 있습니다.
Cilk Plus는 GCC 5에서 GCC [30][31]7까지 지원되었습니다.
GCC는 다양한 명령어 세트 아키텍처로 이식되어 자유 소프트웨어 및 독점 소프트웨어 개발에 도구로서 널리 도입되고 있습니다.GCC는 Symbian(gcce라고 [32]함), ARM 기반 및 Power ISA 기반 [33]칩을 포함한 많은 임베디드 시스템에도 사용할 수 있습니다.컴파일러는 PlayStation [34]2, PlayStation [35]3의 Cell SPE 및 [36]Dreamcast와 같은 비디오 게임 콘솔을 포함한 다양한 플랫폼을 대상으로 할 수 있습니다.다른 [37][self-published source?][better source needed]컴파일러보다 더 많은 종류의 프로세서와 운영체제에 이식되어 있습니다.
지원되는 언어
2021년 5월[update] 현재 GCC의 최근 11.1 릴리즈에는 C의 프론트 엔드가 포함되어 있습니다.gcc
, C++ (g++
, 목표-C, Fortran (gfortran
, Ada(GNAT), Go(gccgo
( ) 및 D)gdc
9.1)[38]부터 OpenMP 및 Open을 사용한 프로그래밍 [39]언어GCC 5.1 [8][40]이후 지원되는ACC 병렬 언어 확장.GCC 7 이전 버전에서도 Java (gcj
)를 사용하여 Java를 네이티브 머신 [41]코드로 컴파일할 수 있습니다.
C++와 C의 언어 버전 지원에 관해서는 GCC 11.1 이후 기본 타깃은 C++17의 슈퍼셋인 gnu++17과 C11의 슈퍼셋인 gnu11로 엄격한 표준 지원도 이용할 수 있습니다.또한 GCC는 C++20 및 향후 C++23에 대한 [42]실험적인 지원을 제공합니다.
서드파티의 프론트 엔드는 Pascal과 같은 많은 언어에 존재합니다.gpc
모듈라-2, 모듈라-3 및 VHDL(GHDL
Unified Parallel[43] C용 GCC UPC 컴파일러나 [44]Rust 등 추가 언어를 지원하기 위한 몇 가지 실험 브랜치가 있습니다.[39]
설계.
GCC의 외부 인터페이스는 Unix 규칙을 따릅니다.사용자는 언어 고유의 드라이버 프로그램을 기동합니다(gcc
C의 경우,g++
명령어 인수를 해석하고 실제 컴파일러를 호출하여 출력에서 어셈블러를 실행하고 선택적으로 링커를 실행하여 완전한 실행 가능한 바이너리를 생성합니다.
각 언어 컴파일러는 소스 코드를 읽고 기계 코드를 출력하는 별도의 프로그램입니다.모두 공통의 내부 구조를 가지고 있습니다.언어별 프런트 엔드는 해당 언어의 소스 코드를 해석하여 추상 구문 트리("tree")를 생성합니다.
이들은 필요에 따라 GENERIC 형식이라고 불리는 중간 끝의 입력 표현으로 변환되며, 중간 끝은 프로그램을 최종 형태로 점진적으로 변환합니다.컴파일러 최적화 및 정적 코드 분석 기술(예를 들어 일부 버퍼 오버플로우를 검출하는 컴파일러 디렉티브인 FORTIFY_SOURCE)[45]이 코드에 적용됩니다.이것들은 복수의 표현, 주로 아키텍처에 의존하지 않는 GIMPLE 표현과 아키텍처에 의존한 RTL 표현에서 동작합니다.마지막으로 머신 코드는 원래 Jack Davidson과 Chris Fraser의 알고리즘에 기초한 아키텍처 고유의 패턴 매칭을 사용하여 작성된다.
GCC는 Ada 프론트 엔드의 일부를 제외하고 주로 C로 작성되었습니다.배포판에는 코드 대부분이 해당 [46]언어로 작성된 Ada 및 C++용 표준 라이브러리가 포함됩니다.플랫폼에 따라서는 머신에 의존하지 않는 C와 프로세서 고유의 머신 코드의 조합으로 작성된 저레벨 런타임 라이브러리 libgcc도 포함되어 타깃 프로세서가 [47]직접 실행할 수 없는 산술 연산을 주로 처리하도록 설계되어 있습니다.
GCC는 많은 추가 툴을 빌드에 사용합니다.이들 대부분은 기본적으로 Perl,[further explanation needed] Flex, Bison 및 기타 일반적인 툴을 포함한 많은 Unix 및 Linux 디스트리뷰션(일반적으로 Windows 설치에는 존재하지 않습니다)에 의해 설치됩니다.또한 현재 구축하기 위해서는 GMP, MPC [48]및 MPFR이라는3개의 라이브러리가 필요합니다.
2010년 5월 GCC 운영위원회는 C++ 컴파일러를 사용하여 GCC를 [49]컴파일하는 것을 허용하기로 결정했다.컴파일러는 주로 C++의 기능 서브셋과 함께 C로 작성되도록 되어 있습니다.특히, 이는 GCC의 개발자들이 C++[50]의 파괴자와 제네릭 기능을 사용할 수 있도록 하기 위해 결정되었다.
2012년 8월, GCC 운영 위원회는 GCC가 현재 구현 [51]언어로 C++를 사용하고 있다고 발표했습니다.즉, 소스로부터 GCC를 구축하려면 ISO/IEC C++03 표준을 이해하는 C++ 컴파일러가 필요합니다.
2020년 5월 18일, GCC는 ISO/IEC C++03 표준에서 ISO/IEC C++11 표준으로 전환되었습니다(즉, 컴파일러 자체의 컴파일, 부트스트랩이 필요하지만 기본적으로는 C++[52]의 최신 버전을 컴파일합니다).
프런트 엔드
각 프런트 엔드는 파서를 사용하여 주어진 소스 파일의 추상 구문 트리를 생성합니다.구문 트리 추상화에 의해 지원되는 다양한 언어의 소스 파일을 동일한 백엔드로 처리할 수 있습니다.GCC는 처음에 바이슨에서 생성된 LALR 파서를 사용하다가 2004년 [53]C++, 2006년 [54]C 및 Objective-C에 대해 수기 재귀 감소 파서로 점차 전환했습니다.2021년 현재 모든 프론트 엔드는 손으로 쓴 재귀 하강 파서를 사용합니다.
GCC 4.0까지 프로그램의 트리 표시는 대상 프로세서와 완전히 독립되어 있지 않았습니다.트리의 의미는 언어 프런트 엔드에 따라 다소 다르며 프런트 엔드는 독자적인 트리 코드를 제공할 수 있습니다.GCC 4.0의 등장과 함께 도입된 GENERIC과 GIMPLE의 두 가지 새로운 형태의 언어 독립 트리의 도입으로 이것은 단순화되었습니다. GENERIC은 GCC 3.x Java 프런트 엔드의 중간 표현에 기반하여 더 복잡합니다.GIMPLE은 다양한 구조가 여러 GIMPLE 명령으로 낮아지는 단순화된 GENERIC입니다.C, C++ 및 Java 프런트엔드는 프런트엔드에서 GENERIC을 직접 생성합니다.다른 프런트 엔드는 해석 후 다른 중간 표현을 가지며 GENERIC으로 변환합니다.
어느 경우든 이른바 "gimplifier"는 이 보다 복잡한 형식을 다수의 강력한 언어 및 아키텍처에 의존하지 않는 글로벌(기능 범위) 최적화를 위한 공통 언어인 보다 단순한 SSA 기반의 GIMPLE 형식으로 변환합니다.
범용 및 심플
GENERIC은 소스 코드를 실행 가능한 이진 파일로 컴파일할 때 "중간"으로 사용되는 중간 표현 언어입니다.GIMPLE이라고 불리는 서브셋은 GCC의 모든 프론트 엔드에 의해 타깃이 됩니다.
GCC의 중간 단계는 모든 코드 분석과 최적화를 수행하며, GENERIC 표현에서[55] 시작하여 전송 언어(RTL) 등록으로 확장하여 컴파일된 언어와 타깃 아키텍처 모두에서 독립적으로 작동합니다.GENERIC 표현에는 중간 엔드에 의해 최적화된 명령형 프로그래밍 구조의 하위 집합만 포함됩니다.
소스 코드를 GIMPLE로 [56]변환할 때 복잡한 식은 임시 변수를 사용하여 3개의 주소 코드로 분할됩니다.이 표현은 필수 프로그램의 분석과 최적화를 단순화하기[58] 위해 Laurie J. Hendren이 McCAT[57] 컴파일러에서 제안한 SIMPLE 표현에서 영감을 받았습니다.
최적화
최적화는 컴파일의 어느 단계에서나 발생할 수 있습니다.그러나 최적화의 대부분은 프런트 엔드의 구문 및 의미 분석 후와 백 엔드의 코드 생성 전에 실행됩니다.따라서 공통적으로 약간 모순되기는 하지만 컴파일러의 이 부분은 "중간 엔드"라는 이름이 됩니다.
GCC 최적화의 정확한 세트는 릴리즈마다 다르지만 루프 최적화, 점프 스레드화, 공통 서브 표현 제거, 명령 스케줄링 등의 표준 알고리즘이 포함됩니다.RTL 최적화의 중요성은 GIMPLE [59]트리에 글로벌 SSA 기반 최적화가 추가됨에 따라 낮아집니다.이는 RTL 최적화의 범위가 훨씬 제한되고 높은 수준의 정보도 적기 때문입니다.
이 레벨에서 실행되는 최적화에는 데드 코드 제거, 부분 용장성 제거, 글로벌 값 번호 부여, 스파스 조건부 상수 전파 및 집약의 스칼라 치환 등이 있습니다.또한 자동 벡터화 및 자동 병렬화 등의 어레이 의존성 기반 최적화를 실시한다.프로파일 가이드 최적화도 가능합니다.[60]
백엔드
이 섹션은 어떠한 출처도 인용하지 않습니다.(2020년 5월 (이 및 타이밍 ) |
GCC의 백엔드는 일부 프리프로세서 매크로 및 타깃아키텍처 고유의 함수에 의해 지정됩니다.예를 들어 엔디안니스, 워드사이즈, 호출규칙을 정의합니다.백엔드의 앞부분은 이것들을 사용하여 RTL 생성을 결정합니다.따라서 GCC의 RTL은 명목상 프로세서에 의존하지 않지만 추상 명령의 초기 시퀀스는 이미 타겟에 맞춰져 있습니다.어느 시점에서든 프로그램 표현을 구성하는 실제 RTL 명령은 대상 아키텍처의 기계 설명에 따라야 합니다.
기계 설명 파일에는 피연산자 제약 조건 및 최종 어셈블리를 출력하기 위한 코드 스니펫과 함께 RTL 패턴이 포함됩니다.제약조건은 특정 RTL 패턴이 특정 하드웨어 레지스터에만 적용되거나 (예를 들어) 제한된 크기의 피연산자 오프셋(12, 16, 24, ...비트 오프셋 등)만 즉시 허용됨을 나타냅니다.RTL 생성 시 지정된 타깃아키텍처의 제약이 체크됩니다.특정 RTL 스니펫을 발행하려면 머신 기술 파일 내의 1개 이상의 RTL 패턴과 일치하고 해당 패턴의 제약조건을 충족해야 합니다.그렇지 않으면 최종 RTL을 머신코드로 변환할 수 없습니다.
컴파일이 끝날 무렵에 유효한 RTL은 각 명령어가 실제 머신 레지스터와 타깃 머신 기술 파일로부터의 패턴을 참조하는 엄밀한 형태로 감소한다.엄격한 RTL을 형성하는 것은 복잡한 작업입니다.중요한 단계는 레지스터 할당입니다.여기서 최초로 할당된 의사 레지스터를 대체하기 위해 실제 하드웨어 레지스터가 선택됩니다.그 후 "새로고침" 단계가 이어집니다.실제 하드웨어 레지스터가 할당되지 않은 의사 레지스터는 스택에 "스필링"되고 이 스필링을 수행하기 위한 RTL이 생성됩니다.마찬가지로 너무 커서 실제 명령에 맞지 않는 오프셋은 분할하고 오프셋 제약 조건을 따르는 RTL 시퀀스로 대체해야 합니다.
마지막 단계에서 머신 코드는 각 패턴과 관련된 코드의 작은 조각을 호출함으로써 구축되며, 타깃의 명령 집합으로부터 실제 명령을 생성하며, 최종 레지스터, 오프셋 및 새로고침 단계에서 선택된 주소를 사용한다.어셈블리 생성 스니펫은 단순한 문자열일 수 있습니다.이 경우 레지스터, 오프셋 및/또는 주소를 문자열로 간단하게 치환할 수 있습니다.어셈블리 생성 스니펫은 C 코드의 짧은 블록일 수도 있으며, 몇 가지 추가 작업을 수행하지만 최종적으로 유효한 어셈블리 코드를 포함하는 문자열을 반환합니다.
C++ 표준 라이브러리(libstdc++)
GCC 프로젝트에는 소스가 GCC를 [62]사용하여 구축될 때 폐쇄 소스 애플리케이션을 링크하는 예외를 제외하고 GPLv3 라이선스에 따라 라이센스가 부여된 libstdc+[61]라는 C++ 표준 라이브러리의 구현이 포함됩니다.현재 버전은 11입니다[when?].
기타 기능
GCC에는 다음과 같은 기능이 있습니다.
- 링크 타임 최적화
- 링크 시간 최적화를 통해 객체 파일 경계 간에 최적화되어 링크된 바이너리를 직접 개선할 수 있습니다.링크 타임 최적화는 오브젝트 [citation needed]파일에 포함된 일부 Gimple 표현의 시리얼화를 포함하는 중간 파일에 의존합니다.파일은 소스 컴파일 중에 오브젝트 파일과 함께 생성됩니다.소스 컴파일마다 개별 오브젝트파일과 링크 타임도우미 파일이 생성됩니다.오브젝트 파일이 링크되면 컴파일러는 다시 실행되어 개별적으로 컴파일된 오브젝트 파일 전체에서 도우미 파일을 사용하여 코드를 최적화합니다.
- 플러그인
- 플러그인은 GCC 컴파일러를 [63]직접 확장합니다.플러그인을 사용하면 플러그인으로 로드된 외부 코드에 따라 스톡 컴파일러를 특정 요구에 맞게 조정할 수 있습니다.예를 들어, 플러그인은 김플 [64]표현으로 작동하는 중간 엔드 패스를 추가, 교체 또는 제거할 수 있습니다.몇 가지 GCC 플러그인이 이미 공개되어 있습니다.특히 다음과 같습니다.
- Python 플러그인은 libpython에 대해 연결되며 컴파일러 내부에서 임의의 Python 스크립트를 호출할 수 있습니다.목적은 GCC 플러그인을 Python으로 작성할 수 있도록 하는 것입니다.
- MELT 플러그인은 GCC를 [65]확장하기 위한 고급 리스프 유사 언어를 제공합니다.
- 플러그인의 지원은 2007년에 [66]한때 논쟁의 대상이 되었습니다.
- C++ 트랜잭션 메모리
- C++ 언어에는 트랜잭션메모리에 대한 액티브한 제안이 있습니다.GCC 6 이후에서는, 를 사용해 컴파일 하는 경우에 유효하게 할 수 있습니다.
-fgnu-tm
를 클릭합니다.[7][67] - 유니코드 식별자
- C++ 언어에서는 식별자 내의 ASCII 이외의 Unicode 문자를 지원해야 하는데, 이 기능은 GCC 10 이후부터 지원되고 있습니다.기존의 스트링 리터럴 처리와 마찬가지로 소스 파일은 UTF-8로 인코딩되어 있는 것으로 간주됩니다.이 기능은 C에서는 옵션이지만 이 변경 [68][69]이후 사용할 수 있게 되었습니다.
- C 내선번호
- GNU C는 중첩된 함수와 식을[70] 포함한 몇 가지 [71]비표준 기능을 사용하여 C 프로그래밍 언어를 확장합니다.
아키텍처
버전 11.1의 GCC 타깃프로세서 패밀리는 다음과 같습니다.[72]
표준 릴리스에서 지원되는 덜 알려진 타깃프로세서는 다음과 같습니다.
FSF 버전과는 별도로 유지되는 GCC 버전에서는 추가 프로세서가 지원되고 있습니다.
GCJ Java 컴파일러는 네이티브 머신 언어 아키텍처 또는 Java 가상 머신의 Java 바이트 [75]코드를 대상으로 할 수 있습니다.GCC의 타깃을 새로운 플랫폼으로 변경할 때는 부트스트래핑이 자주 사용됩니다.Motorola 68000, Zilog Z80 및 기타 프로세서는 다양한 Texas Instruments, Hewlett Packard, Sharp 및 Casio 프로그래밍 가능한 그래프 [76]계산기용으로 개발된 GCC 버전에서도 사용할 수 있습니다.
면허증.
GCC는 GNU General Public License 버전 [77]3에 따라 라이선스가 부여됩니다.GCC 런타임 예외는 GCC와 함께 독점 프로그램(자유 소프트웨어 외에)을 컴파일할 수 있도록 합니다.이것은 GCC 소스 [78]코드의 라이센스 조건에 영향을 주지 않습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ a b "GCC Releases". GNU Project. Retrieved July 24, 2020.
- ^ "GCC 12.1 Released"; 작성자 이름 문자열:Richard Biener; 발행일: 2022년 5월 6일; 회수일: 2022년 5월 6일.
- ^ "GCC Coding Conventions - GNU Project". gcc.gnu.org. Retrieved February 7, 2022.
- ^ a b Víctor Rodríguez (October 1, 2019). "Cutting Edge Toolchain (Latest Features in GCC/GLIBC)". youtube.com. Linux Foundation. Archived from the original on November 7, 2021. Retrieved January 19, 2021.
- ^ "GCC Runtime Library Exception". Retrieved July 24, 2020.
- ^ "Programming Languages Supported by GCC". GNU Project. Retrieved June 23, 2014.
- ^ a b "GCC 6 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
- ^ a b "OpenACC - GCC Wiki". gcc.gnu.org.
- ^ "The LLVM Compiler Infrastructure Project". llvm.org.
- ^ "Apple's GPLv3 purge". meta.ath0.com. Retrieved January 12, 2021.
- ^ Linnemann, Reid (June 20, 2012). "Why Clang". Retrieved January 12, 2021.
- ^ "August 29, 2007: FreeBSD Foundation Newsletter, August 29, 2007". October 11, 2007. Archived from the original on October 11, 2007. Retrieved January 12, 2021.
- ^ "Installing GCC: Binaries - GNU Project - Free Software Foundation (FSF)". gcc.gnu.org. Retrieved January 12, 2021.
- ^ von Hagen, William (2006). The Definitive Guide to GCC. Definitive Guides (2nd ed.). Apress. p. XXVII. ISBN 978-1-4302-0219-6.
So he wrote to VUCK's author asking if GNU could use it. Evidently, VUCK's developer was uncooperative, responding that the university was free but that the compiler was not.
- ^ a b c Stallman, Richard (September 20, 2011). "About the GNU Project". The GNU Project. Retrieved October 9, 2011.
- ^ Puzo, Jerome E., ed. (February 1986). "Gnu's Zoo". GNU's Bulletin. Free Software Foundation. 1 (1). Retrieved August 11, 2007.
- ^ a b c d von Hagen, William (2006). The Definitive Guide to GCC. Definitive Guides (2nd ed.). Apress. p. XXVII. ISBN 978-1-4302-0219-6.
- ^ Richard M. Stallman (forwarded by Leonard H. Tower Jr.) (March 22, 1987). "GNU C compiler beta test release". Newsgroup: comp.lang.c. Retrieved October 9, 2011.
- ^ Stallman, Richard M. (June 22, 2001) [First published 1988], "Contributors to GNU CC", Using and Porting the GNU Compiler Collection (GCC), Free Software Foundation, Inc., p. 7, retrieved June 18, 2015.
- ^ Salus, Peter H. (2005). "Chapter 10. SUN and gcc". The Daemon, the Gnu and the Penguin. Groklaw.
- ^ Garfinkel, Simson L. (August 6, 1990). "Get ready for GNU software". Computerworld. p. 102.
- ^ a b Henkel-Wallace, David (August 15, 1997), A new compiler project to merge the existing GCC forks, retrieved May 25, 2012.
- ^ "The Short History of GCC development". www.softpanorama.org. Retrieved January 24, 2021.
- ^ "History - GCC Wiki". gcc.gnu.org. Retrieved September 28, 2020.
- ^ "GCC steering committee - GNU Project". gcc.gnu.org.
- ^ "PATCH] Remove chill". gcc.gnu.org. Retrieved July 29, 2010.
- ^ "Chart of Fortran 2003 Features supported by GNU Fortran". GNU. Retrieved June 25, 2009.
- ^ "Chart of Fortran 2008 Features supported by GNU Fortran". GNU. Retrieved June 25, 2009.
- ^ "GCC 4.8 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
- ^ "GCC 5 Release Series — Changes, New Features, and Fixes". gcc.gnu.org.
- ^ "GCC 8 Release Series — Changes, New Features, and Fixes". gcc.gnu.org.
- ^ "Symbian GCC Improvement Project". Retrieved November 8, 2007.
- ^ "Linux Board Support Packages". Archived from the original on June 7, 2011. Retrieved January 24, 2021.
- ^ "setting up gcc as a cross-compiler". ps2stuff. June 8, 2002. Archived from the original on December 11, 2008. Retrieved December 12, 2008.
- ^ "CompileFarm - GCC Wiki". gcc.gnu.org.
- ^ "sh4 g++ guide". Archived from the original on December 20, 2002. Retrieved December 12, 2008.
- ^ "Linux Information Project". LINFO. Retrieved April 27, 2010.
The GCC has been ported to (i.e., modified to run on) more than 60 platforms, which is more than for any other compiler.
- ^ "The D Language Front-End Finally Merged Into GCC 9 - Phoronix". phoronix.com. Retrieved January 19, 2021.
- ^ a b "GCC Front Ends". gnu.org. Retrieved November 25, 2011.
- ^ "GCC 5 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
- ^ "GCC 7 Release Series". gnu.org. Retrieved March 20, 2018.
- ^ "C++ Standards Support in GCC". Retrieved May 17, 2021.
- ^ "GCC UPC (GCC Unified Parallel C)". Intrepid Technology, Inc. February 20, 2006. Retrieved March 11, 2009.
- ^ Spengler, Brad (January 12, 2021). "Open Source Security, Inc. Announces Funding of GCC Front-End for Rust".
- ^ "Security Features: Compile Time Buffer Checks (FORTIFY_SOURCE)". fedoraproject.org. Retrieved March 11, 2009.
- ^ "languages used to make GCC".
- ^ "GCC Internals". GCC.org. Retrieved March 1, 2010.
- ^ "Prerequisites for GCC - GNU Project". gcc.gnu.org. Retrieved September 5, 2021.
- ^ "GCC allows C++ – to some degree". The H. June 1, 2010.
- ^ "Re: Efforts to attract more users?". lists.gnu.org.
- ^ "GCC 4.8 Release Series: Changes, New Features, and Fixes". Retrieved October 4, 2013.
- ^ "bootstrap: Update requirement to C++11". GitHub. Retrieved May 18, 2020.
- ^ "GCC 3.4 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
- ^ "GCC 4.1 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
- ^ "GENERIC (GNU Compiler Collection (GCC) Internals)". gcc.gnu.org.
- ^ "GIMPLE (GNU Compiler Collection (GCC) Internals)". gcc.gnu.org.
- ^ "McCAT". Archived from the original on August 12, 2004. Retrieved September 14, 2017.
{{cite web}}
: CS1 maint: bot: 원래 URL 상태를 알 수 없습니다(링크). - ^ "Laurie Hendren's Home Page". www.sable.mcgill.ca.
- ^ Novillo, Diego (December 2004). "From Source to Binary: The Inner Workings of GCC". Red Hat Magazine. Archived from the original on April 1, 2009.
- ^ "Installing GCC: Building - GNU Project". gcc.gnu.org.
- ^ "The GNU C++ Library". GNU Project. Retrieved February 21, 2021.
- ^ "License". GNU Project. Retrieved February 21, 2021.
- ^ "Plugins". GCC online documentation. Retrieved July 8, 2013.
- ^ Starynkevitch, Basile. "GCC plugins thru the MELT example" (PDF). Retrieved April 10, 2014.
- ^ "About GCC MELT". Archived from the original on July 4, 2013. Retrieved July 8, 2013.
- ^ "GCC unplugged [LWN.net]". lwn.net.
- ^ "TransactionalMemory - GCC Wiki". gcc.gnu.org.
- ^ "Lewis Hyatt - [PATCH] wwwdocs: Document support for extended identifiers added to GCC". gcc.gnu.org. Retrieved March 27, 2020.
- ^ "Recommendations for extended identifier characters for C and C++". www.open-std.org. Retrieved March 27, 2020.
- ^ "C Extensions (Using the GNU Compiler Collection (GCC))". gcc.gnu.org. Retrieved January 12, 2022.
- ^ "Typeof - Using the GNU Compiler Collection (GCC)". gcc.gnu.org. Retrieved January 12, 2022.
- ^ "Option Summary (Using the GNU Compiler Collection (GCC))". gcc.gnu.org. Retrieved August 21, 2020.
- ^ "Hexagon Project Wiki".
- ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". code.google.com.
- ^ "The GNU Compiler for the Java Programming Language". Archived from the original on May 9, 2007. Retrieved April 22, 2010.
- ^ 그래프 계산기 #프로그래밍
- ^ "Using the GNU Compiler Collection". gnu.org. Retrieved November 5, 2019.
- ^ "GCC Runtime Exception". FSF. Retrieved April 10, 2014.
추가 정보
- GNU 컴파일러 컬렉션(GCC), Free Software Foundation, 2008 사용.
- GNU 컴파일러 컬렉션(GCC) Internals, Free Software Foundation, 2008.
- GCC의 개요, Network Theory Ltd, 2004 (2005년 8월 개정)ISBN 0-9541617-9-3.
- Arthur Griffith, GCC: The Complete Reference.McGrawHill / Osborne, 2002.ISBN 0-07-222405-3.
외부 링크

공식적인
다른.
- I.I.T. 봄베이의 GCC 4.0.2 아키텍처 및 내부 문서 수집
- Kerner, Sean Michael (March 2, 2006). "New GCC Heavy on Optimization". internetnews.com
- Kerner, Sean Michael (April 22, 2005). "Open Source GCC 4.0: Older, Faster". internetnews.com. Archived from the original on September 17, 2006. Retrieved October 21, 2006
- 소스에서 바이너리로: Red Hat Magazine, 2004년 12월, Diego Novillo의 GCC 내부 작업
- Generic 및 GIMPLE에 관한 2003년 논문
- 1990년대 GCC 개발을 다룬 에세이인 마케팅 시그너스 지원(Marketing Cygnus Support)으로, "Inside Sygnus Engineering" 섹션의 월간 보고서 30건과 함께 말미에 있습니다.
- EGCS 1.0 발표
- EGCS 1.0 기능 목록
- Fear of Forking, GCC/EGCS를 포함한 7개의 유명한 포크를 녹음한 Rick Moen의 에세이