正在連結

在 C++ 專案中,在編譯程式將原始程式碼編譯成物件檔 (*.obj) 之後, 就會執行連結 步驟。 連結器 (link.exe) 會將物件檔合併成單一可執行檔。

鏈接器選項可以在 Visual Studio 內部或外部設定。 在 Visual Studio 中,您可以以滑鼠右鍵按兩下 方案總管 中的項目節點,然後選擇 [屬性] 來顯示屬性頁,以存取連結器選項。 選擇 左窗格中的連結器 以展開節點,並查看所有選項。

連結器命令行語法

當您在 Visual Studio 外部執行連結器時,可以透過一或多個方式指定輸入:

  • 在命令列上
  • 使用命令檔
  • 在環境變數中

鏈接器會先處理環境變數中指定的 LINK 選項,後面接著在命令行和命令檔中指定選項的順序。 如果選項重複使用不同的自變數,則最後一個處理的選項優先。

選項會套用至整個組建;無法將任何選項套用至特定的輸入檔。

若要執行 link.exe,請使用下列命令語法:

link arguments

包含 arguments 選項和檔名,而且可以依任何順序指定。 選項會先處理,然後再處理檔案。 使用一或多個空格或索引標籤來分隔自變數。

注意

您只能從 Visual Studio 命令提示字元啟動此工具。 您無法從系統命令提示字元或 檔案總管 啟動它。

命令列

在命令行上,選項是由選項規範所組成,包括虛線 (-) 或正斜線 (/),後面接著選項的名稱。 無法縮寫選項名稱。 某些選項會採用在冒號之後指定的自變數(:)。 選項規格中不允許空格或索引標籤,但選項中加上引號的 /COMMENT 字串除外。 以十進位或 C 語言表示法指定數值自變數。 選項名稱及其關鍵詞或檔名自變數不區分大小寫,但作為自變數的標識碼會區分大小寫。

若要將檔案傳遞至連結器,請在命令後面 link.exe 指定命令行上的檔名。 您可以使用檔名來指定絕對或相對路徑,而且您可以在檔名中使用通配符。 如果您省略點 (.) 和擴展名,連結器會假設 擴展名 .obj 為 來尋找檔案。 鏈接器不會使用擴展名或缺少擴展名來假設檔案的內容。 它會藉由檢查檔案來判斷檔類型,並據以處理它。

鏈接器傳回零表示成功(沒有錯誤)。 否則,它會傳回停止連結的錯誤號碼。 例如,如果鏈接器產生 LNK1104,則連結器會傳回 1104。 因此,連結器在錯誤時傳回的最低錯誤號碼是 1000。 傳回值 128 代表操作系統或 .config 檔案的組態問題;載入器未載入 link.exec2.dll

連結器命令檔案

您可以以命令檔的形式將命令行自變數傳遞至 link.exe 。 若要指定連結器的命令檔,請使用下列語法:

link @commandfile

commandfile是文字文件的名稱。 在符號 (@) 和檔案名之間不允許空格或索引標籤。 沒有默認擴充功能;您必須指定完整檔名,包括任何擴展名。 無法使用通配符。 您可以使用檔案名來指定絕對路徑或相對路徑。 連結器不會使用環境變數來搜尋檔案。

在命令檔中,自變數會以空格或索引標籤分隔(如命令行上所示),並以換行符分隔。

您可以在命令檔中指定命令列的所有或部分。 您可以在命令中使用 link.exe 多個命令檔案。 連結器接受命令檔輸入,就像是在命令行上的該位置指定一樣。 命令檔案無法巢狀化。 除非指定,否則 /NOLOGO 連結器會回應命令檔案的內容。

範例

下列命令會建置 DLL。 它會在個別的命令檔中傳遞物件檔案和連結庫的名稱,並使用第三個命令檔來指定 /EXPORTS 選項:

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

連結器可辨識下列環境變數:

  • LINK 如果已定義,則為 和 _LINK_。 鏈接器會在環境變數中定義的選項和自變數前面加上,並將環境變數中LINK_LINK_定義的選項和自變數附加至命令行自變數,再進行處理。
  • LIB如果已定義,則為 。 連結器會在搜尋命令行/BASE或 選項上指定的對象、連結庫或其他檔案時,使用LIB路徑。 它也會使用 LIB 路徑在 對象中尋找 .pdb 名為 的檔案。 變數 LIB 可以包含一或多個路徑規格,並以分號分隔。 一個路徑必須指向 \lib Visual C++ 安裝的子目錄。
  • PATH,如果工具需要執行 CVTRES ,且找不到與本身位於相同目錄中 link.exe 的檔案。 (link.exe 需要 CVTRES 鏈接檔案 .res 。) PATH 必須指向 \bin Visual C++ 安裝的子目錄。
  • TMP,以在連結 OMF 或 .res 檔案時指定目錄。

另請參閱

C/C++ 建置參考
MSVC 連結器選項
Module-Definition (.def) 檔案
延遲載入 DLL 的連結器支援