Linking

C++ プロジェクトでは、 コンパイラがソース コードをオブジェクト ファイル (*.obj) にコンパイルした後、リンク ステップが実行されます。 リンカー (link.exe) は、オブジェクト ファイルを 1 つの実行可能ファイルに結合します。

リンカーのオプションは、Visual Studio の内部または外部で設定できます。 Visual Studio 内でリンカーのオプションにアクセスするには、[ソリューション エクスプローラー] でプロジェクト ノードを右クリックし、[プロパティ] を選んでプロパティ ページを表示します。 左側のペインで [リンカー] を選んでノードを展開すると、すべてのオプションが表示されます。

リンカーのコマンド ライン構文

Visual Studio の外部でリンカーを実行する場合は、次の 1 つ以上の方法で入力を指定できます。

  • コマンド ライン
  • コマンド ファイルの使用
  • 環境変数で

リンカーは、最初に環境変数で LINK 指定されたオプションを処理し、次にコマンド ラインとコマンド ファイルで指定された順序でオプションを処理します。 オプションが異なる引数で繰り返されている場合は、最後に処理されたものが優先されます。

オプションは、ビルド全体に適用されます。特定の入力ファイルにオプションを適用することはできません。

実行 link.exeするには、次のコマンド構文を使用します。

link arguments

arguments はオプションとファイル名を含み、任意の順序で指定できます。 最初にオプションが処理され、次にファイルが処理されます。 引数を区切るには、1 つ以上のスペースまたはタブを使用します。

Note

このツールは Visual Studio のコマンド プロンプトからのみ起動できます。 システム コマンド プロンプトやエクスプローラーからは開始できません。

コマンド ライン

コマンド ラインでは、オプションはオプション指定子 (ダッシュ () またはスラッシュ (-/) のいずれか) で構成され、その後にオプションの名前が続きます。 オプション名の省略形は使用できません。 一部のオプションは、コロン (:) の後に指定された引数を受け取ります。 オプションの引用符で囲まれた文字列内を除き、オプション指定内ではスペースまたはタブは /COMMENT 使用できません。 数値引数は、10 進または C 言語の表記で指定します。 オプション名とそのキーワード (keyword)またはファイル名の引数では大文字と小文字は区別されませんが、引数としての識別子では大文字と小文字が区別されます。

リンカーにファイルを渡すには、コマンド ラインでコマンドの後にファイル名を link.exe 指定します。 ファイル名では、絶対パスまたは相対パスを指定できます。また、ファイル名ではワイルドカードを使用できます。 ドット (.) とファイル名の拡張子を省略すると、リンカーはファイルを検索する拡張子 .obj を想定します。 リンカーは、ファイル名拡張子を使用しないか、ファイルの内容に関する想定を行うためにそれらの欠如を使用しません。 ファイルの種類を調べて判断し、それに応じて処理します。

成功した場合、リンカーは 0 を返します (エラーなし)。 それ以外の場合は、リンクを停止したエラー番号を返します。 たとえば、リンカーが生成 LNK1104した場合、リンカーは 1104 を返します。 これにより、リンカーによってエラーで返されるエラー番号の最小値は 1000 です。 戻り値 128 は、オペレーティング システムまたは .config ファイルの構成の問題を表します。ローダーが読み込まれていないか、またはlink.exec2.dll読み込まれませんでした。

リンカー コマンド ファイル

コマンド ライン引数は、 link.exe コマンド ファイルの形式で渡すことができます。 コマンド ファイルをリンカーに指定するには、次の構文を使います。

link @commandfile

テキスト commandfile ファイルの名前を指定します。 アットマーク (@) とファイル名の間にスペースやタブを使用することはできません。 既定の拡張機能はありません。拡張子を含め、完全なファイル名を指定する必要があります。 ワイルドカードは使用できません。 ファイル名では、絶対パスまたは相対パスを指定できます。 リンカーは環境変数を使用してファイルを検索しません。

コマンド ファイルでは、引数はスペースまたはタブ (コマンド ラインと同様) と改行文字で区切られます。

コマンド ラインの全部または一部を、コマンド ファイルで指定できます。 1 つのコマンドで複数のコマンド ファイルを link.exe 使用できます。 リンカーは、コマンド ライン上のその場所で指定された場合と同様に、コマンド ファイル入力を受け入れます。 コマンド ファイルを入れ子にすることはできません。 リンカーは、指定されていない限り /NOLOGO 、コマンド ファイルの内容をエコーします。

次のコマンドは DLL をビルドします。 オブジェクト ファイルとライブラリの名前を個別のコマンド ファイルに渡し、オプションの指定に 3 番目のコマンド ファイルを /EXPORTS 使用します。

link /dll @objlist.txt @liblist.txt @exports.txt

リンカーは、次の環境変数を認識します。

  • LINK_LINK_、定義されている場合は 〘 です。 リンカーは、環境変数で定義されているオプションと引数の先頭に LINK 追加し、環境変数で _LINK_ 定義されているオプションと引数を、処理する前にコマンド ライン引数に追加します。
  • LIB(定義されている場合)。 リンカーは、コマンド ラインまたはオプションで指定されたオブジェクト、ライブラリ、またはその他のファイルを検索するときにパスを/BASE使用LIBします。 また、パスを LIB 使用して、オブジェクト内の名前の .pdb ファイルを検索します。 変数には LIB 、セミコロンで区切られた 1 つ以上のパス指定を含めることができます。 1 つのパスが \lib Visual C++ インストールのサブディレクトリを指している必要があります。
  • PATHツールを実行 CVTRES する必要があり、それ自体と同じディレクトリ link.exe にファイルが見つからない場合。 (link.exeファイルPATHをリンク.resする必要CVTRESがあります)。Visual C++ インストールの\binサブディレクトリを指す必要があります。
  • TMPOMF または .res ファイルをリンクするときにディレクトリを指定します。

関連項目

C/C++ ビルドのリファレンス
MSVC リンカー オプション
モジュール定義 (.def) ファイル
リンカーによる DLL の遅延読み込み