1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0179(2025/06/29)GCC入門

1
Posted at

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 による静的解析まで使いこなすと、バグ検出と性能チューニングの両面で開発効率が一段と向上する。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?