【C言語】LinuxでC言語をgccでコンパイルする方法|基本コマンド・オプション・実行手順まとめ

C言語

最近になって初めて、業務でLinux上での開発を経験したので、まとめました。

Linux環境でC言語のプログラムを開発する場合、最も基本となるのが「gcc(GNU Compiler Collection)」です。

業務着手にあたって、

  • gccって何?
  • コンパイルって何をしているの?
  • どうやって実行するの?
  • オプションって何を指定すればいいの?

といった疑問を持つことが多いです。

この記事では、LinuxでC言語をgccを使ってコンパイルする方法を、初心者向けに丁寧に解説します。

この記事でわかること

  • gccのインストール方法
  • C言語の基本的なコンパイル方法
  • コンパイルと実行の流れ
  • よく使うコンパイルオプション
  • エラー時の対処方法
  • 実務でも役立つポイント
スポンサーリンク
スポンサーリンク

gccとは?

gcc(GNU Compiler Collection)とは、C言語をはじめとするプログラムを機械語に変換する「コンパイラ」です。

簡単に言うと、

人間が書いたコード(C言語)をコンピュータが実行できる形に変換するツール

です。

gccのインストール方法

まずはgccがインストールされているか確認します。

gcc --version

表示されない場合は、インストールします。

Ubuntu / Debian系

sudo apt update
sudo apt install build-essential

CentOS / Rocky Linux

sudo yum groupinstall "Development Tools"

コンパイルの基本

コンパイルコマンド

gcc hello.c

このコマンドを実行すると、

a.out

という実行ファイルが生成されます。

実行方法

Linuxでは、カレントディレクトリの実行ファイルを実行する場合、

./a.out

と入力します。

出力ファイル名を指定する

デフォルトでは a.out になりますが、分かりにくいので名前を付けましょう。

gcc hello.c -o hello

実行:

./hello

よく使うコンパイルオプション

① -o(出力ファイル名)

gcc main.c -o app

② -Wall(警告を表示)

gcc main.c -Wall

個人的に必ず付けるべき。デバッグが捗ります。

③ -Wextra(さらに詳細な警告)

gcc main.c -Wall -Wextra

④ -g(デバッグ情報追加)

gcc main.c -g

gdbでデバッグ可能

⑤ -O(最適化)

gcc main.c -O2

レベル:

  • -O0(最適化なし)
  • -O2(標準)
  • -O3(強め)

⑥ -std(C規格指定)

gcc main.c -std=c11

よく使うもの:

  • c99
  • c11

⑦ 複数ファイルのコンパイル

gcc main.c sub.c -o app

よくあるエラーと対処

① コンパイルエラー

error: expected ‘;’

セミコロン忘れ

② リンクエラー

undefined reference

関数の定義がない

③ 実行できない

Permission denied

👉 実行権限を付与

chmod +x app

応用(少し上級)

分割コンパイル

gcc -c main.c
gcc -c sub.c
gcc main.o sub.o -o app

大規模開発で重要な考え方です。モジュール化することで管理、デバッグがしやすくなるので、後述のMakefileと相性が良いです。

Makefile導入

複数ファイルが増えたらMakefileで管理すると良いです。

Makefileとは何か?

そもそもMakefileとは、

プログラムのビルド手順を自動化するための設定ファイル

です。

「どのファイルを元に、どのファイルを作るか」を定義するルールファイル」で変更されたファイルだけを再コンパイルできる仕組みになります。

詳細な使用方法は以下の外部サイトをご参考になされて下さい。

>>>【初心者向け】Makefile入門

まとめ

LinuxでC言語をgccでコンパイルする基本は以下です。

  • gccでソースコードを実行ファイルに変換
  • -oで名前を指定
  • ./で実行
  • -Wallで警告確認

初心者はまずこれを覚えると良いです:

gcc main.c -o app -Wall
./app

タイトルとURLをコピーしました