ccコマンドでC言語プログラムをコンパイルする方法|gccとの違いと基本オプションコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドA-E, パッケージ管理コマンド > ccコマンドでC言語プログラムをコンパイルする方法|gccとの違いと基本オプションコマンド
「Linuxでccコマンドを実行したのに、gccが動いた…これはどういうこと?」

C言語のソースをコンパイルするとき、教科書ではccと書かれているのに、現代のRHEL9やUbuntu LTSでは実体がgccになっています。これは歴史的経緯と互換性のための仕組みで、ccはgccへのシンボリックリンクとして提供されているためです。

この記事では、ccコマンドの基本的な使い方、gccとの関係、よく使うオプション、そして実際のコンパイルから実行までの流れを解説します。

【この記事でわかること】
・ccコマンドはC言語ソースをコンパイルする標準コマンドです
・RHEL9/Ubuntu LTSではccはgccへのシンボリックリンクとして動作します
-oで出力ファイル名、-Wallで警告表示が基本オプションです
・実行ファイルは./を付けて起動します

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

ccコマンドとgccの関係

RHEL9やUbuntu 22.04/24.04 LTSなど現代のLinuxディストリビューションでは、ccgcc(GNU Compiler Collection)へのシンボリックリンクとして提供されています。実体を確認するには次のコマンドを実行します。

$ which cc /usr/bin/cc $ ls -l /usr/bin/cc lrwxrwxrwx 1 root root 3 Apr 7 10:00 /usr/bin/cc -> gcc

歴史的にUNIXのC言語コンパイラはcc(C Compiler)という名前でした。現代のLinuxでは互換性のためにこの名前が残されており、cc hello.cgcc hello.cは全く同じ動作になります。

基本的な使い方

ccコマンドの書式は以下のとおりです。

cc [オプション] ソースファイル名

1. 基本コンパイル(出力ファイル名を指定)

もっとも基本的な使い方は、hello.cをコンパイルして実行ファイルhelloを作る例です。

$ cc -o hello hello.c $ ./hello Hello, World!

-oを省略するとデフォルトでa.outという名前の実行ファイルが生成されます。カレントディレクトリの実行ファイルを起動するため、必ず./を付けてください。

2. 警告を有効にしてコンパイル

実務では-Wallオプションを常に付けてコンパイルするのが鉄則です。潜在的なバグを事前に検出できます。

$ cc -Wall -o hello hello.c

警告なしでコンパイルが通れば成功です。

3. サンプルプログラムで確認する

簡単なサンプルプログラムhello.cを作成してコンパイルしてみましょう。

$ cat > hello.c < int main(void) { printf("Hello, Linux! "); return 0; } EOF $ cc -Wall -o hello hello.c $ ./hello Hello, Linux!

応用・実務Tips

実務で頻出するオプションを以下にまとめます。

-o ファイル名:出力する実行ファイル名を指定します
-Wall:主要な警告をすべて表示します
-Wextra:追加の警告を表示します(-Wallと併用推奨)
-g:デバッグ情報を埋め込みます(gdb使用時に必要)
-O2:最適化レベル2でコンパイルします(本番ビルドで使用)
-c:リンクせずオブジェクトファイル(.o)のみ生成します
-lm:数学ライブラリをリンクします(sin、cos等を使う場合)

トラブルシュート・エラー対処

ccコマンドが見つからないとき

最小構成インストールではccコマンドがインストールされていない場合があります。RHEL9系/Ubuntu LTSそれぞれのインストール方法は次のとおりです。

RHEL9/AlmaLinux9/Rocky Linux9の場合:

# dnf install -y gcc

Ubuntu 22.04/24.04 LTSの場合:

$ sudo apt install -y build-essential

build-essentialパッケージにはgcc、g++、make等の開発に必要なツールがまとめて含まれています。

「undefined reference to」エラーが出るとき

数学関数(sincos等)を使うと「undefined reference to `sin'」のようなエラーが出ることがあります。-lmオプションでmath.hライブラリを明示的にリンクすることで解決します。

$ cc -Wall -o calc calc.c -lm

本記事のまとめ

やりたいこと コマンド
基本コンパイル cc -o hello hello.c
警告を有効にしてコンパイル cc -Wall -o hello hello.c
デバッグ情報付きコンパイル cc -g -o hello hello.c
最適化ビルド cc -O2 -o hello hello.c
オブジェクトファイルのみ生成 cc -c hello.c
数学ライブラリをリンク cc -Wall -o calc calc.c -lm
gccのインストール(RHEL9系) dnf install -y gcc

Linuxのコンパイル環境を「正しく理解して」使っていますか?

ccコマンドの仕組みを知ることは、Linuxサーバー運用の基本姿勢と直結しています。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。