最近になって初めて、業務でLinux上での開発を経験したので、まとめました。
Linux環境でC言語のプログラムを開発する場合、最も基本となるのが「gcc(GNU Compiler Collection)」です。
業務着手にあたって、
- gccって何?
- コンパイルって何をしているの?
- どうやって実行するの?
- オプションって何を指定すればいいの?
といった疑問を持つことが多いです。
この記事では、LinuxでC言語をgccを使ってコンパイルする方法を、初心者向けに丁寧に解説します。
この記事でわかること
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とは、
プログラムのビルド手順を自動化するための設定ファイル
です。
「どのファイルを元に、どのファイルを作るか」を定義するルールファイル」で変更されたファイルだけを再コンパイルできる仕組みになります。
詳細な使用方法は以下の外部サイトをご参考になされて下さい。
まとめ
LinuxでC言語をgccでコンパイルする基本は以下です。
- gccでソースコードを実行ファイルに変換
-oで名前を指定./で実行-Wallで警告確認
初心者はまずこれを覚えると良いです:
gcc main.c -o app -Wall
./app
