ビルドシステム
以下はhello.cプログラムです。
する#include <stdio.hの> int型のmain() { のprintf( "こんにちは、世界\ n"); 0を返します。 }
Unixシステムでは、コンパイラはソースファイルをオブジェクトファイルに変換します。
gcc -o hello hello.c
プロセスはおおまかに次のとおりです。
-
前処理段階:#で始まる前処理コマンドを処理します。
-
コンパイル段階:アセンブリファイルに変換します。
-
組み立て段階:組み立てファイルを再配置可能なオブジェクトファイルに変換します。
-
リンク段階:再配置可能なオブジェクトファイルと、printf.oなどの個別にプリコンパイルされたオブジェクトファイルを組み合わせて、最終的な実行可能オブジェクトファイルを取得します。
静的リンク
静的リンカーは、再配置可能なオブジェクトファイルのセットを入力として受け取り、完全にリンクされた実行可能オブジェクトファイルを出力として生成します。リンカは主に次の2つのタスクを完了します。
-
シンボル解決:各シンボルは、関数、グローバル変数、または静的変数に対応します。シンボル解決の目的は、各シンボル参照をシンボル定義に関連付けることです。
-
再配置:リンカは、各シンボル定義をメモリ位置に関連付けてから、これらのシンボルへのすべての参照を変更して、このメモリ位置を指すようにします。