閉じる

Ubuntuでgccを入れる手順とCプログラム実行方法(Linux)

UbuntuでC言語を始めるなら、まずコンパイラの導入と基本的な使い方を押さえることが大切です。

本記事ではUbuntuでのgccのインストール手順と、最初のCプログラム(Hello World)の作成から実行までを、初心者の方にも分かりやすく順を追って解説します。

Ubuntuでgccをインストールする手順

aptでbuild-essentialを入れる

Ubuntuでは、Cコンパイラのgccを含む開発ツール一式をbuild-essentialというメタパッケージでまとめて導入できます

これはgcc、g++、make、標準的なヘッダやライブラリを含んでおり、C言語の学習を始めるには十分です。

インストール前にリポジトリ情報を更新してから導入します。

Shell
# パッケージリストを最新化
sudo apt update

# C/C++開発に必要な最小限のツールを一括インストール
sudo apt install -y build-essential

# (任意) デバッガやマニュアルもあると便利
sudo apt install -y gdb manpages-dev

上記コマンドは出力が長くなりますが、途中でSetting up ...Processing triggers for ...といった行が表示され、最後にプロンプトが戻れば成功です。

インストールの途中でパスワード入力を求められたら、Ubuntuユーザのパスワードを入力してください

よく使う関連パッケージの役割

以下は、学習時に合わせて入れておくと便利なパッケージの例です。

パッケージ名役割の概要
build-essentialgcc/g++/makeなど開発の基本一式
gdbC/C++プログラムのデバッガ
manpages-devC標準ライブラリなどの開発向けマニュアル
gitソース管理(学習ノートやサンプルの履歴に便利)

最初はbuild-essentialだけで十分ですが、デバッグやマニュアル参照をしたいタイミングでgdbmanpages-devを追加すると効率が上がります。

インストール時の注意

企業や学校のネットワークではプロキシ設定が必要な場合があります。

その際は/etc/apt/apt.confへのプロキシ設定や、環境変数http_proxyhttps_proxyの設定を確認してください。

WSLのUbuntuでも同じ手順でインストールできます

gccのバージョンを確認する

インストール後は、gccが正しく使えるかバージョン確認で確かめます

合わせて、どこにインストールされたか(パス)も確認すると安心です。

Shell
# gccのバージョン確認
gcc --version

# 実行ファイルの場所を確認
which gcc
実行結果
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) ...
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

# どこにあるか
/usr/bin/gcc

表示されたバージョンが出ていればインストール成功です

複数バージョンのgccが入っていて切り替えたいときはupdate-alternativesが使えますが、初心者の方はまずデフォルトのgccで問題ありません。

Hello WorldのCファイルを作る

エディタを用意する(nanoなど)

最初はターミナルで使いやすいnanoエディタが簡単です

インストールされていない場合は次のコマンドで導入します。

Shell
# nanoが未インストールなら導入
sudo apt install -y nano

# バージョン確認(任意)
nano --version

もちろんvimgedit(デスクトップ環境)を使っても構いません。

学習では「保存方法を迷わないエディタ」を選ぶとつまずきにくいです

nanoの基本操作メモ

  • 保存はCtrl + O、Enterで確定、終了はCtrl + Xです。
  • キー操作が画面下に表示されるので安心です

hello.cを作成する

作業用ディレクトリを作り、そこにhello.cを作成しましょう

Shell
# 作業フォルダを作って移動
mkdir -p ~/c-tutorial/hello && cd ~/c-tutorial/hello

# hello.cを編集(新規作成)
nano hello.c

エディタが開いたら、次の内容を入力・保存します。

C言語
// hello.c - 最初のCプログラム: 画面にメッセージを表示します
// コンパイル方法: gcc hello.c -o hello
// 実行方法    : ./hello

#include <stdio.h>   // printf関数の宣言があるヘッダを読み込む

int main(void) {     // プログラムの入口となる関数(main)
    // 画面に文字を表示します。末尾の \n は改行を意味します。
    printf("Hello, World!\n");

    return 0;        // 正常終了を表す戻り値(0)
}

想定される実行結果:

Hello, World!

上のプログラムはC言語の最小構成で、#includemain関数、printfによる出力の3点を確認できます。

gccでコンパイルする(基本)

単一ファイルをコンパイルする(gcc hello.c)

コンパイルとは、Cのソースコードを実行可能なプログラムに変換する操作です

最もシンプルなコマンドは次の通りです。

Shell
# カレントディレクトリにhello.cがある前提
gcc hello.c

このコマンドが成功すると、デフォルト名a.outの実行ファイルが生成されます。

名前が分かりづらいので、実務では次のように出力ファイル名を指定するのが一般的です。

コンパイル時のよくあるエラーと対処

症状(一部抜粋)原因対処
hello.c: No such file or directoryカレントディレクトリが違う、またはファイル名のタイプミスlsでファイル確認、正しい場所に移動
implicit declaration of function ‘printf’#include <stdio.h>がないヘッダstdio.hをインクルード
undefined reference to ‘…'(リンクエラー)追加のライブラリが必要学習初期では稀。必要に応じ-lmなどを指定
権限エラー(Permission denied)実行権がない/パス指定が誤りgcc生成物は通常実行権あり。./a.outのように相対パスで実行

エラー文は必ず一行目から丁寧に読み、ファイル名・行番号・関数名を手掛かりに直すのが近道です

出力ファイル名を指定する(-o hello)

出力ファイル名は-oオプションで明示的に指定します。

あわせて警告を出しやすくする-Wall-Wextraも有効化すると学習に役立ちます。

Shell
# 警告を有効にし、出力ファイル名をhelloに指定
gcc -Wall -Wextra hello.c -o hello

# 生成物を確認
ls -l hello
実行結果
-rwxr-xr-x 1 yourname yourname 16784 Sep 26 12:34 hello

ファイルの先頭にx(実行権)が含まれていれば、そのまま実行できます

サイズや日付は環境により異なります。

より丁寧なコンパイル(最適化やデバッグ)

学習では必須ではありませんが、-O0(最適化なし、デバッグしやすい)、-g(デバッグ情報付与)を使うと、エラー原因の特定やデバッガ利用がスムーズです。

Shell
gcc -Wall -Wextra -O0 -g hello.c -o hello

LinuxでCプログラムを実行する

実行のしかた(./hello)

実行はカレントディレクトリを明示するため、ファイル名の前に./を付けます

これがないと、環境変数PATH上のディレクトリしか検索されず、command not foundになります。

Shell
# 生成したプログラムを実行
./hello
実行結果
Hello, World!

もしPermission deniedが出る場合は実行権を確認してください(通常gccの出力には実行権があります)。

念のため権限を付与するには次の通りです。

Shell
chmod +x hello

実行は「コンパイルが成功し、実行権があり、正しい場所(./)を指定」できれば確実に行えます

実行とコンパイルを続けて行う

開発の流れを短くするには、&&でコマンドを連結すると便利です。

Shell
gcc -Wall -Wextra hello.c -o hello && ./hello

画面出力を確認する(printf)

printfは画面(標準出力)に文字を表示する基本関数で、最後に\n(改行)を付けるのが習慣です。

改行を付けないと、バッファリングの影響で表示が遅れることがあります。

C言語
// printfの基本: 改行あり/なしの違いを見てみましょう
#include <stdio.h>

int main(void) {
    printf("改行ありの行です。\n");      // すぐに表示されやすい
    printf("改行なしの行です。");        // 場合によっては表示が遅れることがある
    return 0;
}
実行結果
改行ありの行です。
改行なしの行です.

実務では常に行末に\nを付けるか、必要に応じてfflush(stdout);で明示的にフラッシュします。

文字列に関する軽い注意

全角文字(日本語)を扱う際は、端末の文字コード(通常UTF-8)に揃えると文字化けを避けやすいです。

学習初期は英数字のみで始め、環境が整ってから日本語出力にトライするとスムーズです。

まとめ

Ubuntuではbuild-essentialを導入し、gcc --versionで確認、hello.cを作ってgcc -o hello hello.cでコンパイル、./helloで実行という流れが基本です。

初心者の方はまずこの一連の操作を何度か繰り返し、コマンドの意味(更新・インストール・コンパイル・実行)とファイルの所在を身体で覚えるとつまずきにくくなります。

警告は-Wall -Wextraで早めに気づけるようにし、エラーはメッセージを丁寧に読む癖を付けましょう。

次のステップとして、gdbによるデバッグや複数ファイルのコンパイルに進むと、より実践的なC言語の力が身に付きます。

この記事を書いた人
エーテリア編集部
エーテリア編集部

プログラミングの基礎をしっかり学びたい方向けに、C言語の基本文法から解説しています。ポインタやメモリ管理も少しずつ理解できるよう工夫しています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!