リンカーを呼び出す 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_sscanf_s を呼び出します。

  • MOD2.c は、mylinemycircle という名前のグラフィックス関数を呼び出します。これらは MYGRAPH.lib という名前のライブラリで定義されています。

このプログラムをビルドするには、次のコマンド ラインを使ってコンパイルします。

CL MAIN.c MOD1.C MOD2.C MYGRAPH.lib

CL では、最初に C ソース ファイルがコンパイルされ、オブジェクト ファイル MAIN.obj、MOD1.obj、MOD2.obj が作成されます。コンパイラにより、標準ライブラリの名前が各 .obj ファイルに配置されます。 詳細については、ランタイム ライブラリの使用に関する記事を参照してください。

CL は、各 .obj ファイルの名前を、MYGRAPH.lib という名前と共に、リンカーに渡します。 リンカーは、次のように外部参照を解決します。

  1. MAIN.obj では、func1 への参照は MOD1.obj の定義を使って解決されます。func2 への参照は、MOD2.obj の定義を使って解決されます。

  2. MOD1.obj では、printf_sscanf_s への参照は、MOD1.obj 内で名前が付けられていることをリンカーが見つけたライブラリ内の定義を使って解決されます。

  3. MOD2.obj では、mylinemycircle への参照は、MYGRAPH.lib 内の定義を使って解決されます。

関連項目

MSVC コンパイラ オプション
コンパイラ オプションの設定