C言語GUI入門|GCCと開発ツールをインストールする

C言語のソースファイルからWindows向けの実行ファイルを作るには、GCCを中心とした開発ツールが必要です。

この節では、MSYS2 UCRT64環境へ次の2つをインストールします。

  • UCRT64向けのGCCツールチェーン
  • MSYS2で開発作業を行うためのbase-devel

インストール後は、gcc --versionでGCCが実行できることを確認します。さらに、which gccを使用して、UCRT64向けのGCCが選ばれていることを確認します。

作業の流れは次のとおりです。

  1. MSYS2 UCRT64ターミナルを起動する
  2. UCRT64環境であることを確認する
  3. GCCツールチェーンをインストールする
  4. base-develをインストールする
  5. gcc --versionでバージョンを確認する
  6. which gccでGCCの場所を確認する
  7. UCRT64向けGCCが選ばれていることを確認する

第2章では、まだC言語のプログラムは作成しません。ここでは、次の章からソースファイルをコンパイルできるように、必要な道具をそろえていきましょう。

GCCと開発ツールの役割

GCCは、C言語で書いたソースファイルをコンピューターが実行できる形式へ変換するためのコンパイラーです。

ただし、C言語の開発ではGCC本体だけでなく、次のようなツールも必要になります。

  • ソースファイルをコンパイルするツール
  • オブジェクトファイルを結合するツール
  • ライブラリを扱うツール
  • Windows向けのヘッダーファイル
  • Windows向けのランタイム
  • プログラムをデバッグするツール
  • 複数のファイルをまとめてビルドするツール

このように、プログラムの作成に必要な道具をまとめた一式をツールチェーンと呼びます。

GCCだけではなくツールチェーンを導入する理由

小さなC言語プログラムであれば、GCC本体だけでもコンパイルできる場合があります。しかし、GTK 4を使ったGUIアプリケーションでは、ヘッダーファイルやライブラリを扱う複数のツールが関係します。

本コンテンツでは、必要なツールをあとからひとつずつ追加するのではなく、UCRT64向けのツールチェーングループをまとめてインストールします。

使用するグループ名は次のとおりです。

mingw-w64-ucrt-x86_64-toolchain

このグループには、GCC、GDB、Binutils、Windows向けヘッダーファイル、make、pkgconfなどが含まれています。

主なパッケージ役割
gccC言語などのソースファイルをコンパイルする
binutilsアセンブラーやリンカーなどを提供する
gdbプログラムの動作を調べるデバッガー
headersWindows向けのヘッダーファイルを提供する
crtWindows向けプログラムの実行に必要な基本部分を提供する
makeビルド手順を自動化する
pkgconfライブラリのコンパイル情報を取得する
winpthreadsスレッド処理に関係する機能を提供する

すべての名前や役割を、今すぐ暗記する必要はありません。まずは、GCCを中心とした開発道具のセットだと考えておけば大丈夫です。

図1:GCCツールチェーンを構成する開発ツール

この図から分かること

C言語の開発では、GCCだけが単独で働くわけではありません。

リンカー、ヘッダーファイル、make、pkgconfなど、複数の道具が連携します。ツールチェーングループを利用すると、UCRT64環境で必要になる主要な開発ツールをまとめてインストールできます。

インストール前にMSYS2を更新する

GCCをインストールする前に、MSYS2全体が最新になっていることを確認します。

MSYS2 UCRT64ターミナルを起動し、次のコマンドを実行します。

pacman -Syu

更新対象が表示された場合は、画面の案内に従って更新します。MSYS2本体の更新によってターミナルが閉じた場合は、MSYS2 UCRT64を起動し直し、同じコマンドをもう一度実行します。

pacman -Syu

次のように表示されれば、更新対象はありません。

:: Starting core system upgrade...
 there is nothing to do
:: Starting full system upgrade...
 there is nothing to do

古いパッケージ情報のままGCCをインストールすると、依存するパッケージのバージョンが合わない可能性があります。先にシステム全体を更新しておくと、トラブルを減らせます。

MSYS2 UCRT64ターミナルを確認する

GCCのインストールは、MSYS2 UCRT64ターミナルで行います。

ターミナルのプロンプトにUCRT64と表示されていることを確認してください。

ユーザー名@コンピューター名 UCRT64 ~
$

MSYSやMINGW64と表示されている場合は、別の環境を起動しています。

そのままインストールすると、本コンテンツで使用するものとは異なるGCCが選ばれる可能性があります。現在のターミナルを閉じ、WindowsのスタートメニューからMSYS2 UCRT64を起動し直しましょう。

GCCツールチェーンをインストールする

MSYS2 UCRT64ターミナルへ、次のコマンドを入力します。

pacman -S --needed mingw-w64-ucrt-x86_64-toolchain

コマンドが長いため、途中で改行しないように注意してください。コピーして貼り付けてもかまいません。

コマンドの意味

部分役割
pacmanMSYS2のパッケージ管理ツール
-Sパッケージをサーバーと同期してインストールする
--neededすでに最新のパッケージは再インストールしない
mingw-w64-ucrt-x86_64-toolchainUCRT64向けのGCCツールチェーングループ

パッケージ名は長いですが、部分ごとに見ると対象が分かります。

部分意味
mingw-w64Windows向けの開発環境
ucrtUniversal C Runtimeを使用する
x86_6464ビットのIntelまたはAMD系CPU向け
toolchain開発ツール一式

この名前がUCRT64向けツールチェーンを表しています。

インストールするパッケージを選択する

コマンドを実行すると、ツールチェーングループに含まれるパッケージの一覧が表示されます。

表示例は次のようになります。

:: There are 13 members in group mingw-w64-ucrt-x86_64-toolchain:
:: Repository ucrt64
   1) mingw-w64-ucrt-x86_64-binutils
   2) mingw-w64-ucrt-x86_64-crt
   3) mingw-w64-ucrt-x86_64-gcc
   4) mingw-w64-ucrt-x86_64-gdb
   5) mingw-w64-ucrt-x86_64-gdb-multiarch
   6) mingw-w64-ucrt-x86_64-headers
   7) mingw-w64-ucrt-x86_64-libmangle
   8) mingw-w64-ucrt-x86_64-libwinpthread
   9) mingw-w64-ucrt-x86_64-winpthreads
  10) mingw-w64-ucrt-x86_64-make
  11) mingw-w64-ucrt-x86_64-pkgconf
  12) mingw-w64-ucrt-x86_64-tools
  13) mingw-w64-ucrt-x86_64-winstorecompat

Enter a selection (default=all):

パッケージの数や順番は、MSYS2の更新によって変わる可能性があります。

本コンテンツではグループ全体をインストールするため、何も入力せずにEnterキーを押します。

Enter a selection (default=all):

default=allは、Enterキーだけを押すとすべて選択されるという意味です。

インストールを確認する

パッケージの選択後、ダウンロードサイズやインストール後の容量が表示されます。

続いて、次のような確認が表示されます。

:: Proceed with installation? [Y/n]

Yを入力してEnterキーを押します。

Y

Yが大文字で表示されているため、Enterキーだけでも続行できます。ただし、初めて操作するときはYを入力すると、何を選んだのか分かりやすくなります。

インストール中はターミナルを閉じない

インストールが始まると、次のような処理が行われます。

:: Retrieving packages...
:: Checking keys in keyring...
:: Checking package integrity...
:: Loading package files...
:: Checking for file conflicts...
:: Processing package changes...

それぞれの意味は次のとおりです。

表示処理内容
Retrieving packagesパッケージをダウンロードしている
Checking keys in keyringパッケージの署名を確認している
Checking package integrityファイルが壊れていないか確認している
Loading package filesパッケージを読み込んでいる
Checking for file conflicts既存ファイルとの競合を確認している
Processing package changesパッケージをインストールしている

再び入力待ちのプロンプトが表示されるまで待ちます。

ユーザー名@コンピューター名 UCRT64 ~
$

GCCツールチェーンに含まれる主な機能

インストールしたツールチェーンには、次のような機能が含まれています。

GCC

C言語のソースファイルをコンパイルします。

第3章では、gccコマンドを使ってC言語のソースファイルからexeファイルを作成します。

Binutils

アセンブラー、リンカー、オブジェクトファイルを確認するツールなどを提供します。

GCCを実行すると、必要に応じてこれらのツールが内部で呼び出されます。

GDB

プログラムの動作を詳しく調べるためのデバッガーです。

プログラムを1行ずつ実行したり、変数の値を確認したりするときに使用します。

Windows向けヘッダーファイルとランタイム

Windows上で動作するプログラムを作るために必要な宣言や基本機能を提供します。

make

複数のコンパイル手順を自動化するためのツールです。

本コンテンツの前半ではGCCを直接実行しますが、プログラムが大きくなるとmakeなどのビルドツールが便利になります。

pkgconf

ライブラリを利用するために必要なコンパイルオプションやリンクオプションを取得します。

GTK 4プログラムをコンパイルするときに使用するpkg-configコマンドは、この仕組みと関係しています。

図2:pacmanでGCCと開発ツールをインストールする

この図から分かること

GCCツールチェーンはpacmanを使ってインストールします。

ツールチェーングループを指定すると、GCCだけでなく、リンカー、デバッガー、make、pkgconfなどもまとめて導入できます。選択画面ではEnterキーで全パッケージを選び、確認画面ではYを入力してインストールを進めます。

base-develをインストールする

続いて、開発作業でよく使用する基本ツールをまとめたbase-develをインストールします。

MSYS2 UCRT64ターミナルで、次のコマンドを実行します。

pacman -S --needed base-devel

base-develは、MSYS2でソフトウェアのビルドやパッケージ作成を行うための基本ツールをまとめたものです。MSYS2の公式パッケージ情報では、makepkgによるパッケージ作成に必要な最小限の開発用パッケージとして説明されています。

base-develの役割

base-develには、次のような開発作業で利用するツールが含まれます。

  • make
  • patch
  • diff
  • sed
  • awk
  • grep
  • m4
  • autoconf
  • automake
  • libtool
  • pkgconf
  • makepkgで必要になる補助ツール

含まれるパッケージは、MSYS2の更新によって変わる可能性があります。

本コンテンツですべてのツールをすぐに使用するわけではありませんが、今後ライブラリを扱ったり、ビルド処理を自動化したりするときの基本環境になります。

base-develとツールチェーンの違い

項目主な役割
mingw-w64-ucrt-x86_64-toolchainWindows向けプログラムを作るためのUCRT64用ツール
base-develMSYS2内でビルド作業を行うための基本ツール
GCCC言語のソースファイルをコンパイルする
GTK 4GUI機能を提供するライブラリ

ツールチェーンは、Windows向けの実行ファイルを作るための道具です。

base-develは、MSYS2環境内でさまざまなビルド作業を行うための補助的な道具を提供します。両方をインストールしておくと、これからの学習を進めやすくなります。

インストールを進める

コマンドを実行すると、インストール対象と必要な容量が表示されます。

続いて、次の確認が表示されます。

:: Proceed with installation? [Y/n]

Yを入力してEnterキーを押します。

Y

インストール済みのパッケージは、--neededによって不要な再インストールが省略されます。

処理が完了し、入力待ちのプロンプトへ戻るまでターミナルを閉じないでください。

ターミナルを再起動する

GCCツールチェーンとbase-develのインストールが完了したら、MSYS2 UCRT64ターミナルを一度閉じます。

その後、WindowsのスタートメニューからMSYS2 UCRT64を起動し直します。

再起動することで、インストールしたコマンドや環境設定が、新しいターミナルで確実に利用できる状態になります。

起動後は、プロンプトにUCRT64と表示されていることを確認します。

ユーザー名@コンピューター名 UCRT64 ~
$

gcc --versionでGCCを確認する

GCCが正しくインストールされたことを確認します。

MSYS2 UCRT64ターミナルで、次のコマンドを実行します。

gcc --version

コマンドの意味

部分役割
gccGCCを起動するコマンド
--versionインストールされているバージョン情報を表示する

実行結果の例

gcc.exe (Rev3, Built by MSYS2 project) 16.2.0
Copyright (C) 2026 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

GCCのバージョン番号やRevの番号は、インストールした時期によって異なります。例と同じ番号でなくても問題ありません。

次の内容が確認できれば、GCCは実行できています。

  • gcc.exeと表示される
  • Built by MSYS2 projectと表示される
  • GCCのバージョン番号が表示される
  • command not foundというエラーが表示されない

MSYS2公式パッケージ情報では、UCRT64向けGCCはmingw-w64-ucrt-x86_64-gccというパッケージとして提供されています。

使用しているGCCの場所を確認する

パソコンに別のGCCがインストールされている場合、意図しないGCCが実行されることがあります。

そのため、GCCが動くだけでなく、どこにあるGCCが選ばれているかも確認します。

次のコマンドを実行します。

which gcc

実行結果の例

/ucrt64/bin/gcc

この結果が表示されれば、UCRT64向けのGCCが使用されています。

MSYS2のパスとWindowsのパス

MSYS2では、WindowsのフォルダーをUnix形式のパスで表します。

MSYS2での表示Windowsでの場所
/ucrt64/bin/gccC:\msys64\ucrt64\bin\gcc.exe
/ucrt64/binC:\msys64\ucrt64\bin
/usr/binC:\msys64\usr\bin

MSYS2をC:\msys64以外へインストールした場合は、Windows側のパスも変わります。

UCRT64環境では、コマンドの検索先であるPATHの先頭に/ucrt64/binが追加されます。そのため、gccと入力すると、通常は/ucrt64/bin/gccが実行されます。

Windows形式でGCCの場所を確認する

Windows形式のパスでも確認できます。

MSYS2 UCRT64ターミナルで、次のコマンドを実行します。

where.exe gcc

実行結果の例

C:\msys64\ucrt64\bin\gcc.exe

パソコンに複数のGCCがインストールされている場合は、複数のパスが表示されることがあります。

その場合は、最初に次のパスが表示されることを確認します。

C:\msys64\ucrt64\bin\gcc.exe

コマンドを入力したときは、通常、検索順で最初に見つかったGCCが実行されます。

whichとwhere.exeの違い

コマンド表示形式主な用途
which gccMSYS2形式Bashから実行されるGCCを確認する
where.exe gccWindows形式Windows上のGCCの場所を確認する

本コンテンツでは、まずwhich gccの結果を確認します。必要に応じてwhere.exe gccも利用すると、エクスプローラー上の場所と対応させやすくなります。

GCCの対象環境を確認する

必要に応じて、GCCがどの環境向けのプログラムを作るように設定されているか確認できます。

次のコマンドを実行します。

gcc -dumpmachine

実行結果の例

x86_64-w64-mingw32

この表示は、64ビットWindows向けのGCCであることを表します。

部分意味
x86_6464ビットのIntelまたはAMD系CPU
w6464ビットWindows関連
mingw32MinGW-w64系のWindows向け環境

名前の末尾にmingw32と含まれていますが、32ビット版のGCCを使用しているという意味ではありません。先頭のx86_64が64ビット向けであることを示しています。

図3:UCRT64向けGCCが使われていることを確認する

この図から分かること

GCCの確認では、バージョンだけでなく、使用しているGCCの場所も確認することが大切です。

gcc --versionでGCCが実行できることを確認し、which gccで/ucrt64/bin/gccが選ばれていることを確認します。さらにgcc -dumpmachineを実行すると、64ビットWindows向けのGCCであることを確認できます。

正常にインストールできたときの確認結果

すべての確認が成功すると、次のような状態になります。

確認内容期待する結果
使用中のターミナルプロンプトにUCRT64と表示される
gcc --versionGCCのバージョンが表示される
which gcc/ucrt64/bin/gccと表示される
where.exe gccC:\msys64\ucrt64\bin\gcc.exeが最初に表示される
gcc -dumpmachinex86_64-w64-mingw32と表示される

これらを確認できれば、UCRT64向けのC言語開発環境が正しく用意されています。

gcc: command not foundと表示された場合

gcc --versionを実行したときに、次のようなエラーが表示される場合があります。

bash: gcc: command not found

この場合は、次の点を確認します。

  • GCCツールチェーンのインストールが完了したか
  • pacmanの処理中にターミナルを閉じていないか
  • MSYS2 UCRT64ターミナルを使用しているか
  • インストール後にターミナルを起動し直したか
  • パッケージ名を正しく入力したか

GCCツールチェーンをもう一度確認する場合は、次のコマンドを実行します。

pacman -S --needed mingw-w64-ucrt-x86_64-toolchain

インストール済みのパッケージは--neededによって省略され、不足しているものがあればインストールされます。

which gccの結果が異なる場合

which gccの結果が次のようになっている場合は、UCRT64以外のGCCが選ばれています。

/mingw64/bin/gcc

この場合は、MSYS2 MINGW64ターミナルを起動している可能性があります。

次の手順で起動し直します。

  1. 現在のターミナルを閉じる
  2. Windowsのスタートメニューを開く
  3. MSYS2 UCRT64を検索する
  4. MSYS2 UCRT64を起動する
  5. which gccをもう一度実行する

期待する結果は次のとおりです。

/ucrt64/bin/gcc

PowerShellやコマンドプロンプトでgcc --versionを実行すると、別のGCCが選ばれたり、gccが見つからなかったりする場合があります。環境構築中の確認は、MSYS2 UCRT64ターミナルで行いましょう。

インストールした開発環境を今後も更新する

GCCや開発ツールは、今後pacman -Syuを実行すると、MSYS2のほかのパッケージと一緒に更新されます。

pacman -Syu

GCCだけをWebサイトから個別にダウンロードして上書きする必要はありません。MSYS2で導入したパッケージは、pacmanを通して管理します。

GCCとbase-develの準備が整ったら、次はGTK 4をインストールし、C言語からウィンドウやボタンを利用できる環境を追加していきます。