GNUコンパイラコレクションとは? わかりやすく解説

Weblio 辞書 > 固有名詞の種類 > 製品 > コンピュータ > ソフトウェア > オープンソース > GNUコンパイラコレクションの意味・解説 

GNUコンパイラコレクション

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/08/22 01:19 UTC 版)

GNU Compiler Collection
 ウィキデータを編集
開発元 Free Software Foundation
初版 1987年3月22日 (39年前) (1987-03-22)[1]
リポジトリ ウィキデータを編集
対応OS 多くのUnix系OSWindows(一部)
プラットフォーム クロスプラットフォーム
サポート状況
種別 コンパイラ
ライセンス GPL
公式サイト gcc.gnu.org ウィキデータを編集
テンプレートを表示

GNU Compiler Collection(グヌーコンパイラコレクション)は、GNUコンパイラ群である。略称は「GCC(ジーシーシー)」。GNUツールチェーンの中核となる構成要素(コンポーネント)にもなっている[2]

概説

最新標準パッケージには CC++Objective-CObjective-C++FortranAdaGoDのコンパイラ並びにこれらのライブラリが含まれている。[3] バージョン7以前では、Javaもサポートされていた。[4]

当初はCコンパイラとして開発し、GCCは GNU C Compiler を意味していた。しかし、もともと多言語を想定して設計しており、 GNU C Compiler と呼ばれていたときでも多くの言語に対応していた。現在でも GNU C Compiler の意味で「GCC」と呼ぶことも多い。ちなみに GNU C Compiler の実行ファイルの名称もgccである。なお、GNU C++コンパイラをG++、GNU JavaコンパイラをGCJ、GNU AdaコンパイラをGNATと呼ぶ[2]

CコンパイラとしてのGCCは、ANSI規格 (ANSI X3.159-1989) にほぼ適合するC言語コンパイラ処理系であった。登場当初の時点では、オペレーティングシステム (OS) 標準に付属するCコンパイラがANSI規格に適合していない部分が多いものがあった。そのため、GCCはANSI規格を広める役割を果たした。GCC自身はK&Rの範囲内のC言語で記述していたので、OS付属のコンパイラでコンパイルできた。ただし、GNU拡張という独自の仕様もあり、GCCでコンパイルできるものがANSI適合コンパイラでコンパイルできるとは限らない。

歴史

1985年、当時マサチューセッツ工科大学 (MIT) の研究者であったリチャード・ストールマンによって、既成のコンパイラを拡張する形で開発が始められた。当初コンパイラはPastel英語版というPascalの方言によって書かれていた。その後ストールマンとLeonard H. Tower, Jr.によってC言語で書き直され、GNUプロジェクトの一つとして1987年に公開された。さらに2012年にはLawrence CrowlとDiego NovilloによってC++で書き直された。[5][6]

EGCS

EGCS(エッグズ[7]、Experimental/Enhanced GNU Compiler System)は、1997年に当時開発中のGCC 2.8をベースとしてCygnus社のEGCS Steering Committee(後のGCC Steering Committee)により開発された拡張版GCCである。1999年4月、GCCと再統合されてEGCSがGCCの公式バージョンとなり、GCCの開発主力はGCC Steering Committeeに委ねられた。また、この時点でGCCはGNU Compiler Collectionの意味となった[5]。統合後初めてリリースされたバージョンは、1999年7月のGCC 2.95である。

GCCの主なバージョン[8]
日付 バージョン 内容
1999年7月31日 2.95 1999年4月のGCC/EGCS再統合以来のGCCの最初のリリースであり、ほぼ1年分の新しい開発とバグ修正が含まれている。
2001年6月18日 3.0
2002年5月15日 3.1 ほとんどのELFプラットフォームの既定のデバッグ形式がDWARF2に。
2002年8月14日 3.2
2003年5月13日 3.3
2004年4月18日 3.4 GCCの実装がK&RからC89に変更。新しいプロシージャ間最適化を実装。
2005年4月20日 4.0.0 tree ssaブランチをマージ。既存のRTL表現よりも高レベルの中間表現に基づく完全に新しい最適化フレームワークを採用。
2007年5月13日 4.2.0 OpenMP 2.5サポート
2008年3月5日 4.3.0 Intel Core 2とAMD Geodeプロセッサのサポートを強化
2009年4月21日 4.4.0 大量の新機能を含んだメジャーリリースバージョン。Graphiteブランチが統合され、新しいループ最適化のフレームワークを採用。
2010年4月14日 4.5.0 C++0xの実験的サポート (ラムダ式、型変換演算子、raw string)。新しいリンク時最適化(LTO)のフレームワークを採用。
2011年3月25日 4.6.0 Intel Sandy Bridgeプロセッサに対応 (AVX拡張命令セットも対応)
2012年3月22日 4.7.0 プロシージャ間最適化(IPO)の改善
2013年3月22日 4.8.0 GCCの実装がCからC++98に変更された。アドレスサニタイザ、スレッドサニタイザが追加。新しいローカルレジスタアロケータ(LRA)が実装。DWARF4が既定のデバッグ形式に。
2014年4月22日 4.9.0 C++14の機能追加、OpenMP 4.0対応。未定義動作サニタイザが追加。リンク時最適化の改善。
2015年4月22日 5.1 C11がデフォルトに。未定義動作サニタイザの新しいオプション。ポインタ境界チェッカー。
2016年4月27日 6.1 C++14がデフォルトに。OpenMP 4.5をフルサポート。配列境界チェッカー。
2017年5月2日 7.1 C++17の実験的サポート。アドレスサニタイザの新しいオプション。
2018年5月2日 8.1 C17をサポート。C17がデフォルトに。C++2aの実験的サポート。エラーメッセージを改善。
2019年5月3日 9.1 C++17をサポート。C++2a(C++20)の実験的サポート。D言語をサポート。
2020年5月7日 10.1 C++14とC++17の間のABIの非互換性を修正。C++20をサポート。
2021年4月27日 11.1 GCCの実装がC++11で書き直された。C++17がデフォルトに。DWARF5が既定のデバッグ形式に。
2021年5月14日 8.5
2021年6月1日 9.4
2021年6月28日 11.2
2022年4月21日 11.3
2022年5月6日 12.1 C++20とC++23(実験的)のサポートを改善。シャドーコールスタックサニタイザがAArch64に追加。
2022年5月27日 9.5
2022年6月28日 10.4
2022年8月19日 12.2
2023年4月26日 13.1 C23の実験的サポート。Modula-2プログラミング言語をサポート。
2023年5月8日 12.3 AMD Zen 4プロセッサーのサポート。(-march=znver4)
2023年5月29日 11.4
2023年7月7日 10.5
2023年7月27日 13.2
2024年5月7日 14.1 C23のサポートを改善。C++26の実験的サポート。Rustプログラミング言語を実験的にサポート。
2024年5月21日 13.3
2024年6月20日 12.4
2024年7月19日 11.5
2024年8月1日 14.2
2025年4月25日 15.1 C23がデフォルトに。C++23とC++26のサポートを改善。Rustプログラミング言語のサポートを改善。
2025年5月23日 14.3
2025年6月5日 13.4
2025年7月11日 12.5
2025年8月8日 15.2
2026年4月30日 16.1 C++20がデフォルトに。C++23とC++26のサポートを改善。Algol 68プログラミング言語をサポート。
2026年6月12日 15.3
2026年6月26日 14.4
2026年8月7日 16.2

構成

GCCは通常のコンパイラと同様にフロントエンド部、最適化部、バックエンド部から構成される。

フロントエンド部は字句解析構文解析などを行い、対応言語ごとに用意されている。たとえばC++フロントエンド、Javaフロントエンドなどがある。

バックエンド部のコード生成部(コードジェネレータ)、および最適化部(オプティマイザ)は全言語で共通である。したがってGCCの対応の言語同士の間では、生成コードの質や対応するCPUの種類は原理的に同じになる。なお、フロントエンドおよびバックエンドの間でやりとりされる中間形式としてレジスタ転送言語英語版 (RTL) が使用される。

CコンパイラとしてのGCCの開発のために開発された構文解析部生成系bisonやフリーな字句解析部生成系flexといったプログラムを使用してGNU Cコンパイラその他の各種フロントエンドは構築されている。これらは単独の自由ソフトウェアとしても有用なものである。

GCCはバージョン4から中間形式が2つ追加された。まず、各言語は通常フロントエンド言語の木構造を保持した共通中間形式のGENERICに変換されその後GIMPLE英語版という中間形式で木の最適化SSAをおこなってからRTLの最適化がおこなわれる。また、CやC++のコンパイル時にフロントエンドの構文解析、字句解析においてbisonやflexを使用しなくなった。

GNU Cコンパイラ拡張

GNU C コンパイラの特徴のひとつは、前述のようにANSIあるいはISO等の標準への準拠である。もうひとつの特徴は独自の拡張機能である。このような拡張を「GCC拡張機能」とよぶ。GCC拡張機能は数多いが、多引数マクロ、基本型としての複素数型、式の演算結果としての左辺値、初期化式の拡張、Cでのインライン関数定義、ネストした関数定義、ラベルに対する&演算子の適用などがある。

このような拡張は、C99における標準Cの拡張として逆に取り込まれたものも多い。

言語機能の拡張のほかに、標準外機能としてasm文によるインラインアセンブラの機能はユニークである。ただし、GCCにおいてはこのインラインアセンブラ機能を利用して記述したコードに対しても最適化が行われる(プログラマが意図してアセンブリ言語を用いて書いたとしても、その通りのコードが出力されない可能性がある)点に注意が必要である。

その他、研究論文の発表における実装例のベースとして、あるいは実験的機能実装のベースとしてGCC (G++)が使われることも多い。そのような拡張の最近の例としては、スタックバッファオーバーフローに関する脆弱性の回避のためのGCC拡張ProPoliceなどがある。

最適化

GCCは高度な最適化を行うが、CPUベンダやRISCワークステーションメーカが提供するコンパイラと比べると見劣りする場合もある。マルチアーキテクチャゆえに、機種依存しない最適化が中心となるため、特定の CPU に特化した専用コンパイラと比べてやや不利な立場といえる[9]

2005年4月にリリースされたGCC4.0はループ最適化の改善や自動ベクトル化など最適化機構が大幅に見直されている反面、GCC3.x で書かれたコードがコンパイルエラーになることがあり、互換性において若干の問題点がある。GCC4.2ではバグ修正、最適化の改善に加え、新機能としてCC++FortranOpenMPに対応し、さらにGCC4.3ではループの自動並列化によるマルチスレッド処理が可能となるなど、マルチプロセッサ環境では大幅にアプリケーションの性能を引き上げることが可能になった。ただし、マルチスレッドやベクトルプロセッサを使用しないことを前提としたシングルスレッドアプリケーションにおける最適化においては3.x系よりも一部のプログラムにおいて劣る場合もある[10][11][12]

2010年4月にリリースされたGCC4.5ではリンク時最適化が導入され、複数のオブジェクトファイルにまたがるプログラムに対してより効果的に最適化ができるようになった。なおリンク時最適化とは単にリンク時に行う最適化を意味し、プロシージャ間最適化英語版やプログラム全体最適化を改善する上で求められるようになった[13]

1990年頃のGCC1.xや2.xは、特にMC680x0系に対して商用コンパイラを凌駕する最適化品質を誇っていたとされる[14]。ただし、これは同時代の68k系商用コンパイラとの相対的な比較・評価であり絶対的な指標によるものではない。

また1990年代後半のPGCC英語版インテル Pentium専用の最適化を行うGCC(正確にはegcs)の派生であり、通常版と比べてPentium CPU上でより効率良く動作するコードを生成する[15]

ライセンスと開発体制

貢献と評価

GCCはそれ自身が有用な自由ソフトウェアであるだけでなく、オペレーティングシステム (OS) やDOSエクステンダDJGPPEMX英語版など)を構築するための基盤ツールとしても広く利用されてきた。特にLinuxFreeBSDなどの自由ソフトウェアとしてのOS開発において中核的な役割を果たしており、Linuxの生みの親であるリーナス・トーバルズはGCCをGNUプロジェクトの中で最も重要なものとして挙げている[16]。また、Linuxカーネルの開発においては、長年にわたりGCC固有の拡張機能(GNU C拡張)が深く活用されてきた歴史がある[17]

多数のCPUアーキテクチャに対応したクロス開発(クロスコンパイル)が容易であることから[18]、多くの組み込みOSやゲーム開発環境(各種コンソールゲーム機など)でも標準的なツールチェーンとして採用されてきた。

一方で、1990年代の一時期には、特定のプロセッサに特化した最適化を行う商用コンパイラ(インテルコンパイラなど)と比較して、科学技術演算向けのベクトル演算対応やベンチマークスコアにおいて見劣りする面もあった。これは多様な環境へのポータビリティを第一とする設計思想に起因するものであったが、1997年のEGCSプロジェクトの発足と、その後のGCCへの再統合を経て、各アーキテクチャ固有の最適化機能(自動ベクトル化など)の強化が継続的に行われている[19]。また、大規模なソフトウェア開発においては、極度な最適化よりも、既存のコードが正しくコンパイルされ安定して動作するという互換性と堅牢性の高さが、GCCが標準採用され続ける重要な要因として評価されている[20]

批判とライセンス忌避に伴う他コンパイラへの移行

GCCを巡っては、採用されているGNU General Public License(特に2007年に策定されたバージョン3、GPLv3)の制約が企業や一部のオープンソースプロジェクトから問題視される場合がある。

GPLには強いコピーレフト性があり、リンクやコードの一部の使用によってプログラム全体にGPLが伝播する性質があるが、GCCにはGCC Runtime Library Exception(GCCランタイムライブラリ例外)が存在するため、GCCをコンパイラとして利用してバイナリを作成する限りにおいては、その成果物にGPLを強制することはない

しかし、GCC自体のソースコードを改変して再頒布する場合や、GCCを組み込み機器等のシステムに組み込んで提供する場合には、GPLv3で義務付けられたソースコードの開示や、デジタル著作権管理 (DRM) による改変制限の禁止(TiVo化の禁止)、特許授与条項などの厳しい条件が課されることになる。このため、商業利用におけるリスクや「GPLフリー」なプラットフォーム構築を目指し、オペレーティングシステム (OS) や開発環境の標準ツールチェーンをGCCから別のコンパイラへ切り替える動きが活発化した。

具体的な一例として、FreeBSDプロジェクトではGPLv3ライセンスの適用を避けるため、ベースシステムに含まれるGCCのバージョンをGPLv2下の最終版である「4.2.1」で長期間凍結した。その後、2012年に標準コンパイラをBSDライセンス準拠のClang/LLVMへと完全に切り替えた[21][22]。また、Appleも同様の理由から、macOSiOSの開発環境(Xcode)においてGCCの採用を取り止め、LLVM/Clangプロジェクトへ多大な投資を行って自社環境の全面的な移行を完了させている[23]

AIを使用した開発の禁止

2026年7月29日よりAIを使用した開発を禁止している。AIを使用した約15行以上のプルリクエストは全て拒否する。ただし、テストコードに限り一部にAIを使用していたものが含まれていても許容する。[24][25]

サポートするアーキテクチャ

脚注

  1. GCC Releases”. GNU Project. 2024年1月8日閲覧。
  2. 1 2 GCC, the GNU Compiler Collection (英語). gnu.org. The GCC Team. 2026年6月16日閲覧。
  3. Using the GNU Compiler Collection (GCC): G++ and GCC(Version 9.3)”. 2020年3月18日閲覧。
  4. Using the GNU Compiler Collection (GCC): G++ and GCC(Version 6.5)”. 2020年3月18日閲覧。
  5. 1 2 History - GCC Wiki
  6. Jacobson, Linda (2013年3月13日). “GCC's move to C++”. LWN.net (アメリカ英語). 2026年6月16日閲覧.
  7. The initial egcs project announcement - GNU Project - Free Software Foundation (FSF)
  8. GCC Releases - GNU Project”. gcc.gnu.org. 2022年6月18日閲覧。
  9. GCC Front Ends - GNU Project (英語). www.gnu.org. 2026年6月16日閲覧。
  10. GCC 4.0 Release Series — Changes, New Features, and Fixes - GNU Project”. gcc.gnu.org. 2026年6月16日閲覧。
  11. GCC 4.2 Release Series — Changes, New Features, and Fixes - GNU Project”. gcc.gnu.org. 2026年6月16日閲覧。
  12. GCC 4.3 Release Series — Changes, New Features, and Fixes - GNU Project”. gcc.gnu.org. 2026年6月16日閲覧。
  13. Hubička, Honza (2014年4月21日). Honza Hubička's Blog: Linktime optimization in GCC, part 1 - brief history”. Honza Hubička's Blog. 2022年6月19日閲覧。
  14. 「特集2 Cプログラミング応用編」『Oh!X 1990-01』日本ソフトバンク。
  15. PGCC: The Pentium Compiler | Using the GNU Compiler Collection | InformIT”. www.informit.com. 2020年8月15日時点のオリジナルよりアーカイブ。2022年6月18日閲覧。
  16. Linuxの強味
  17. Linux Kernel Programming Language”. The Linux Kernel Archives. 2026年6月16日閲覧。
  18. GCC Back-Ends”. GNU Project. 2026年6月16日閲覧。
  19. The EGCS Project”. GNU Project. 2026年6月16日閲覧。
  20. Linux and the Intel Compiler”. LWN.net. 2026年6月16日閲覧。
  21. FreeBSD takes another step toward GPL escape - TechRepublic・2012年11月7日
  22. FreeBSD's move to Clang”. LWN.net. 2026年6月16日閲覧。
  23. LLVM in Xcode 3.0”. LLVM Project. 2026年6月16日閲覧。
  24. GNU Compiler Collection - AI Policy - GNU Project”. gcc.gnu.org. 2026年8月1日閲覧。
  25. GCC AI Policy Announcement”. gcc.gnu.org. 2026年8月1日閲覧。

関連項目

外部リンク


GNUコンパイラコレクション (GCC)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/04 02:05 UTC 版)

C言語」の記事における「GNUコンパイラコレクション (GCC)」の解説

C/C++以外の言語サポートし多数CPUオペレーティングシステムに対応、組み込み向けも含む多様な開発広く使われるオープンソースコンパイラ独自拡張機能も多い。

※この「GNUコンパイラコレクション (GCC)」の解説は、「C言語」の解説の一部です。
「GNUコンパイラコレクション (GCC)」を含む「C言語」の記事については、「C言語」の概要を参照ください。

ウィキペディア小見出し辞書の「GNUコンパイラコレクション」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



固有名詞の分類


英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「GNUコンパイラコレクション」の関連用語

GNUコンパイラコレクションのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



GNUコンパイラコレクションのページの著作権

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのGNUコンパイラコレクション (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのC言語 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2026 GRAS Group, Inc.RSS