まず始めにエディタでソースファイルを作成します. ここで作成する課題は,いつもの定番 Hello World!!です. このプログラムは画面に Hello World!!を表示するだけのプログラムです. プログラムを以下に示します.
これを入力して好きな名前で保存してください. 以下の例では,このファイル名を HelloWorld.cとします.
コンパイルにはccと言うコマンドを使います. これは,GNU [1] によって作成されているCコンパイラでgccとよばれるものです. これまでのVisual C++だと,ボタンをクリック/メニューを選択するだけで, コンパイルからリンクまでを行ってくれたと思います.
実際のCのコンパイルはプリプロセスと2つのステージで実行されることが 仕様で決まっています. プリプロセスでは, #defineで定義したマクロを置き換えることなどが 行われます. 次の作業はアセンブラへの変換です. その後アセンブラがオブジェクトファイルへと翻訳されます.
オブジェクトファイルではまだ,ライブラリなどに入っている関数などへの 参照が解決されていないので,これを解決するためにリンクが行われます.
ここまでの作業を図で表すと図1-2のようになります.
ソースファイル
→ プリプロセス
→ コンパイルステージ1(アセンブラへ変換)
→ コンパイルステージ2(オブジェクトファイルへ変換)
→ リンク
→ 実行可能形式(executable)
指定をしなかった場合,コンパイラは一気に実行可能形式を作成します. コマンドラインオプションの指定で,適当な段階でコンパイルを止めることも 可能です. これは,後の方で分割コンパイルを行う必要が出てきた時に詳しく説明します.
では,実際にコンパイルしてみましょう.
herb{?} ls
HelloWorld.c
herb{?} cc HelloWorld.c
herb{?} ls
HelloWorld.c a.out
このように,a.outというファイルが作成されます. このファイルが実行形式です. 実行してみましょう.
herb{?} ./a.out
Hello World!!
うまく動きましたか? コマンド指定の頭に付いている ./は カレントディレクトリのという意味でした. システムのコマンドに同じ名前のコマンドがあるかもしれないので, このように指定しておいたほうが安全です.
いつもa.outという名前では嫌だと思いませんか? コマンドラインオプションの -oを使えば自分の好きな名前で 実行可能形式を作成できます.
herb{?} cc -o HelloWorld HelloWorld.c
herb{?} ls
HelloWorld HelloWorld.c a.out
herb{?} ./HelloWorld
Hello World!!
これは,忠告ですがテスト用のプログラムだからと言って実行可能形式の ファイル名を testとしてしまうと testコマンドがあるのではまります. 別の名前にしましょう.
前回の授業では,日付を与えて曜日を表示するプログラムの 入力とコンパイルをしてもらいました. コンパイル手順などはここまでの説明などと同じなので省略します.
授業で入力してもらったプログラムは day.cで, そのコンパイル手順は
herb{?} cc -o day day.c
でした.
当日行った作業も参照してください.
| [1] |