リンカーを呼び出す CL
CL は、/c オプションを使わない限り、コンパイル後にリンカーを自動的に呼び出します。 CL は、コンパイル中に作成された .obj ファイルの名前と、コマンド ラインで指定した他のすべてのファイルの名前をリンカーに渡します。 リンカーでは、LINK 環境変数に指定されているオプションが使用されます。 /link オプションを使うと、CL コマンド ラインでリンカー オプションを指定できます。 /link オプションの後に続くオプションは、LINK 環境変数のオプションをオーバーライドします。 次の表のオプションを使うと、リンクが抑制されます。
オプション | 説明 |
---|---|
/c | リンクを行わないコンパイル |
/E、/EP、/P | コンパイルやリンクを行わない前処理 |
/Zg | 関数プロトタイプの生成 |
/Zs | 構文の確認 |
リンクの詳細については、MSVC リンカー オプションに関する記事を参照してください。
例
ここでは、3 つの C ソース ファイル MAIN.c、MOD1.c、MOD2.c をコンパイルすると想定します。 各ファイルには、別のファイルで定義された関数の呼び出しが含まれています。
MAIN.c は、MOD1.c の関数
func1
と MOD2.c の関数func2
を呼び出します。MOD1.c は、標準ライブラリ関数
printf_s
とscanf_s
を呼び出します。MOD2.c は、
myline
、mycircle
という名前のグラフィックス関数を呼び出します。これらは MYGRAPH.lib という名前のライブラリで定義されています。
このプログラムをビルドするには、次のコマンド ラインを使ってコンパイルします。
CL MAIN.c MOD1.C MOD2.C MYGRAPH.lib
CL では、最初に C ソース ファイルがコンパイルされ、オブジェクト ファイル MAIN.obj、MOD1.obj、MOD2.obj が作成されます。コンパイラにより、標準ライブラリの名前が各 .obj ファイルに配置されます。 詳細については、ランタイム ライブラリの使用に関する記事を参照してください。
CL は、各 .obj ファイルの名前を、MYGRAPH.lib という名前と共に、リンカーに渡します。 リンカーは、次のように外部参照を解決します。
MAIN.obj では、
func1
への参照は MOD1.obj の定義を使って解決されます。func2
への参照は、MOD2.obj の定義を使って解決されます。MOD1.obj では、
printf_s
とscanf_s
への参照は、MOD1.obj 内で名前が付けられていることをリンカーが見つけたライブラリ内の定義を使って解決されます。MOD2.obj では、
myline
とmycircle
への参照は、MYGRAPH.lib 内の定義を使って解決されます。