GCC入門
1. はじめに
- GCC(GNU Compiler Collection) は、C/C++ をはじめ多言語をサポートするオープンソースのコンパイラ群。
- Linux 系 OS では標準的に採用され、クロスプラットフォーム対応・最適化性能の高さから業務・研究の両面で広く使われている。
2. GCC の役割と内部構造
-
コンパイラの使命:人間可読なソースコードを機械語へ変換し、CPU が即時実行できるバイナリを生成する。
→ 解析 → 最適化 → コード生成 → リンクの 4 段階。 -
フロントエンド/バックエンド:
- フロントエンドは言語ごとのパーサ(例:gcc, g++, gfortran)。
- バックエンドはアーキテクチャごとのコード生成器(x86_64, Arm 等)。
- 両者を束ねるのが GCC の強み。
3. 基本的な使い方
-
単一ファイルのビルド
gcc -Wall -O2 hello.c -o hello-
-Wall:主要警告を全て有効化。 -
-O2:バランスの良い最適化レベル。
-
-
ステップを分割したビルド
gcc -c hello.c # ① 解析・最適化・コード生成(object) gcc hello.o -o hello # ② リンカとして実行 -
複数ファイル
- オブジェクトをまとめてリンカへ渡すだけ。
gcc -c foo.c bar.c gcc foo.o bar.o -o app
4. 開発効率を高めるオプション
-
-g:デバッグシンボルを付与し gdb でのステップ実行が容易に。 -
-fsanitize=address:実行時にヒープ/スタック破壊を検知。 -
-march=native:ローカル CPU の命令セットを最大活用。 -
-flto:リンク時最適化でバイナリをさらに小さく・速く。
5. 実践 Tips
-
undefined reference:ライブラリは 必ず最後 に列挙(
gcc main.o -lm)。 -
C と C++ 混在:最終リンクを
g++で行い、必要に応じてextern "C"で名前修飾を抑制。 -
クロスコンパイル:
aarch64-none-linux-gnu-gccなどのツールチェーンを用意し--target=オプションでターゲット指定。 - Make/CMake 連携:再ビルド時間を短縮し CI/CD で再現性を担保。
6. macOS/Windows での注意点
- macOS の
gccは実体が Clang。GNU GCC 独自の最適化を試すなら Homebrew 版をインストール。 - Windows は MSYS2 や WSL で Linux 同等の GCC 環境を再現可能。MinGW 版はネイティブ実行ファイルを生成。
7. まとめ
- GCC は 長年の改良で信頼性と最適化品質が成熟 した事実上の標準コンパイラ。
-
-Wall -Wextra -O2 -gをデフォルトにし、段階的に最適化と静的解析を追加するのが実践的なフロー。 - CI では
-Werrorで警告をコンパイルエラー扱いにし、品質を自動で担保しよう。
Next Step:gdb・Valgrind との連携や
-fanalyzerによる静的解析まで使いこなすと、バグ検出と性能チューニングの両面で開発効率が一段と向上する。