基本を再チェック〜gcc〜

YAMAMORI Takenori ●yamamori

●C言語のコンパイルテスト

gccでプログラムをコンパイルしたり,あるいはgcc自体の動作を確認するためには, とりあえず何らかのソースファイルを用意しなければなりません. こういう場合,単に“Hello World !”と表示するだけの hello.cのような短いプログラムが役に立ちます.

●hello.c(あとでhello++.ccとしても使用)
#include <stdio.h>

main()
{
  printf("Hello World !\n");
  return 0;
}

それでは実際にhello.cをコンパイルしてみましょう. ここでは次の実行例ようにコマンド操作を進めます.

●実行例:C言語のコンパイル
$ gcc hello.c                ← (*1)
$ ./a.out                    ← (*2)
Hello World !
$ rm a.out
$ make hello                 ← (*3)
cc     hello.c   -o hello
$ ./hello
Hello World !
$ size hello                 ← (*4)
   text    data     bss     dec     hex filename
    847     224      24    1095     447 hello
$ CC=gcc; export CC          ← (*5) (※注1)
$ CFLAGS=-O2; export CFLAGS
$ rm -f hello hello.o        ← (※注2)
$ make hello                 ← (*6)
gcc -O2    hello.c   -o hello
$ ./hello
Hello World !
$ size hello                 ← (*7)
   text    data     bss     dec     hex filename
    831     224      24    1079     437 hello
※注1
bashほか,「export CC=gcc」の形式で書けるシェルも普及していますが, ここでは移植性を考慮してBourne shellの文法に従っています.
※注2
再度makeするため,バイナリファイルを削除しています. ここでは,実行ファイルのhelloのほかhello.oができる場合もあるため, これも念のため削除しています.

gccでhello.cをコンパイルする最も簡単な方法は, オプションを付けずに単に「gcc hello.c」とコマンド入力することです. これだけでとりあえずコンパイルはできます.(*1) しかしこれでは,出力される実行バイナリファイルのファイル名が, デフォルトのa.outになるだけでなく, コンパイル時の最適化も行なわれていないため, 非効率な実行ファイルができてしまいます.(*2)

通常は,gccには各種のオプションを付けて起動します. これらのオプションはコマンドラインで入力することになりますが, 長いオプションを入力するのは少々大変かも知れません. そこで,makeコマンドを,Makefileなしで使う方法を紹介します. ここでは深いことは考えず,試しに「make hello」とだけ入力してみて下さい. Makefileなしでもmakeコマンドが動作し, コンパイルが行なわれることがわかるはずです.(*3)

この場合,デフォルトのCコンパイラであるccが, 「-o hello」オプションを付けた状態で起動されています. ここで「-o」は出力ファイルを指定するオプションで, これによってa.outではなくhelloという実行バイナリファイルができます. なお,ここではコンパイラがgccではなくccとなっていますが,LinuxやFreeBSDでは, ccは結局gccにシンボリックリンク(またはハードリンク)されているので, これでOKなのです.(ただし,Solarisでccがない場合はエラーになるでしょう) ここで,あとでの比較のため,sizeコマンドでバイナリサイズを調べておきます.(*4)

次に,環境変数としてCCとCFLAGSに, 適切な値をセットした状態で再度コンパイルを行なってみましょう.(*5) すると今度は「make hello」と打つことにより, 「gcc -O2 hello.c -o hello」が実行されるようになります.(*6) 「-O2」は最適化レベル2のオプションです. 再びsizeコマンドでhelloのサイズを調べてみると, 最適化により,実行バイナリのサイズも減少していることがわかります.(*7) なお,環境変数CCやCFLAGSの値は,login時に好みの値が自動的にセットされるように, $HOME/.profileなどに記述しておくとよいでしょう.


To『基本を再チェック〜gcc〜』[index]


このページは、技術評論社 Software Design 2001年2月号、『プログラムのコンパイルとリンク』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 with Linux/FreeBSD[Home]
yamamori