正在連結
在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.exe
或 c2.dll
。
連結器命令檔案
您可以以命令檔的形式將命令行自變數傳遞至 link.exe
。 若要指定連結器的命令檔,請使用下列語法:
link @commandfile
commandfile
是文字文件的名稱。 在符號 (@) 和檔案名之間不允許空格或索引標籤。 沒有默認擴充功能;您必須指定完整檔名,包括任何擴展名。 無法使用通配符。 您可以使用檔案名來指定絕對路徑或相對路徑。 連結器不會使用環境變數來搜尋檔案。
在命令檔中,自變數會以空格或索引標籤分隔(如命令行上所示),並以換行符分隔。
您可以在命令檔中指定命令列的所有或部分。 您可以在命令中使用 link.exe
多個命令檔案。 連結器接受命令檔輸入,就像是在命令行上的該位置指定一樣。 命令檔案無法巢狀化。 除非指定,否則 /NOLOGO
連結器會回應命令檔案的內容。
範例
下列命令會建置 DLL。 它會在個別的命令檔中傳遞物件檔案和連結庫的名稱,並使用第三個命令檔來指定 /EXPORTS
選項:
link /dll @objlist.txt @liblist.txt @exports.txt
LINK 環境變數
連結器可辨識下列環境變數:
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 的連結器支援