gcc
https://gyazo.com/cf684fbb01532005f47b9be70e87bdc6
gcc(GNU Compiler Collection)はGNUプロジェクトが提供するコンパイラ群およびそれに含まれるCコンパイラである。C言語班ではこのGCCに含まれるCコンパイラを指してgccと呼ぶことが多いので注意。 以下、Cコンパイラの方のgccについて記述する。
gccとは
フリーソフトウェアで、ほとんどのLinuxディストリビューションに含まれるコンパイラであり、C言語処理系の中でも最もメジャーなものとなっている。Linuxカーネルのビルドはこのgccを用いて行うことになる。(気になる人はgentoo Handbookのカーネルの設定のページを見に行ってみましょう。Gentoo LinuxはLinuxディストリビューションの一つです。) また、gccはANSIによって標準化されたC言語の仕様に加え、拡張文法をサポートしている。
コマンドの使い方
gcc hoge.cで実行可能ファイルを生成する。生成されたファイルの名前はa.outとなる。
複数のソースコードから一つの実行可能ファイルを生成するときはgcc main.c hello.cのように単にソースファイルを複数指定すれば良い。
-oオプション
生成するバイナリのファイル名を指定できる。つまりgcc hoge.c -o hogeを実行するとa.outの代わりにhogeが生成される。
-Sオプション
コンパイルのみを行い、アセンブリを出力する。
-cオプション
コンパイルのみを行いオブジェクトファイルを生成する。(リンクは行わない)
-gオプション
コンパイル・リンク時にデバッグ情報を付加する。gdbを使うときなどに必要。
-Wallオプション
コンパイルエラーではないがバグになる可能性のある部分に警告を表示する。
-Wオプション
-Wallでは無視されるがチェックが望まれる項目に対して警告を出す。
-Oxオプション
最適化の度合いを指定できる。-O0, -O1, -O2, -O3, -Os, -Ogなどがある。
-O0:何も指定しない場合に指定される。最適化は行わず、コンパイル速度を重視する。
-O1:最適化を行う。デバッグに支障が無いものだけが有効化される。
-O2:強い最適化を行う。ほとんどの最適化オプションは-O2を指定すると有効になる。
-O3:非常に強い最適化を行う。-O3でビルドしたパッケージは通常通りに動作しない可能性がある。
-Os:速度ではなくバイナリサイズが小さくなるように最適化する。
-Og:デバッグ機能を維持しつつ速度も最適化する。