連結器工具錯誤 LNK2022
中繼資料作業失敗 ( HRESULT ) : error_message
連結器在合併中繼資料時偵測到錯誤。 中繼資料錯誤必須解決才能成功連結。
診斷此問題的其中一個方法是在物件檔案上執行 ildasm -tokens ,以尋找哪些類型有所列 error_message
的權杖,並尋找差異。 在中繼資料中,具有相同名稱的兩個不同類型無效,即使 Just LayoutType 屬性不同也一樣。
LNK2022的其中一個原因是類型(例如結構)存在於多個具有相同名稱的編譯中,但定義衝突,以及當您使用 /clr 編譯時。 在此情況下,請確定類型在所有編譯和中都有相同的定義。 類型名稱會列在 中 error_message
。
LNK2022的另一個可能原因是當連結器在與編譯器指定不同的位置找到中繼資料檔案時(使用 #using )。 確保中繼資料檔 (.dll 或 .netmodule) 所在位置是與傳遞給連結器時相同,也與傳遞給編譯器時相同。
建置 ATL 應用程式時,如果宏 _ATL_MIXED
至少用於一個編譯器,則需要在所有編譯和中使用宏。
範例
下列範例會定義空型別。
// LNK2022_a.cpp
// compile with: /clr /c
public ref class Test {};
此範例顯示您無法連結兩個原始程式碼檔案,其中包含相同名稱但不同的定義類型。
下列範例會產生LNK2022。
// LNK2022_b.cpp
// compile with: LNK2022_a.cpp /clr /LD
// LNK2022 expected
public ref class Test {
void func() {}
int var;
};
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應