連結器工具錯誤 LNK2038
偵測到 'name' 的不相符: 值 'value_1' 不符合 filename.obj 中的 'value_2' 值
連結器偵測到符號不相符。 此錯誤表示應用程式的不同部分,包括連結庫或其他應用程式所連結的物件程序代碼,使用符號的衝突定義。 偵測 不符 pragma 可用來定義這類符號,並偵測其衝突的值。
多個原因與解決方案
在專案的目的檔過期時,會發生這個錯誤。 在您嘗試解決這個錯誤的其他方案之前,執行乾淨的組建以確保目的檔是最新的。
Visual Studio 會定義下列符號以防止連結不相容的程式碼,此程式碼可能會造成執行階段錯誤或其他未預期的行為。
_MSC_VER
指出用來建置應用程式或連結庫的 Microsoft C++ 編譯程式 (MSVC) 的主要和次要版本號碼。 使用一個 MSVC 版本編譯的程式代碼與使用不同主要和次要版本號碼的版本所編譯的程式代碼不相容。 如需詳細資訊,請參閱_MSC_VER
預先定義的宏。如果您要連結至與所使用的 MSVC 版本不相容的連結庫,而且無法取得或建置連結庫的相容版本,您可以使用舊版編譯程式來建置專案:將專案的 Platform Toolset 屬性變更為舊版工具組。 如需詳細資訊,請參閱如何: 修改目標 Framework 和平台工具組。
_ITERATOR_DEBUG_LEVEL
指出 C++ 標準連結庫中啟用的安全性和偵錯功能層級。 這些功能可以變更某些 C++ 標準程式庫物件的表示,因而使它們與使用其他安全性和偵錯功能的項目不相容。 如需詳細資訊,請參閱 _ITERATOR_DEBUG_LEVEL。RuntimeLibrary
指出應用程式或連結庫所使用的 C++ 標準連結庫和 C 執行時間版本。 使用 C++ 標準程式庫或 C 執行階段某個版本的程式碼與使用不同版本的程式碼不相容。 如需詳細資訊,請參閱 /MD、/MT、/LD (使用執行階段程式庫)。_PPLTASKS_WITH_WINRT
指出使用平行模式連結庫 (PPL) 的程式代碼會連結至使用 /ZW 編譯程式選項的不同設定所編譯的物件。 (/ZW
支援 C++/CX.)使用或 相依於PPL的程式代碼必須使用應用程式其餘部分所使用的相同/ZW
設定來編譯。
請確定這些符號的值在整個 Visual Studio 方案中的專案中都一致,而且它們也與應用程式所連結的程式代碼和連結庫一致。
第三方連結庫問題和 vcpkg
如果您在嘗試將第三方連結庫設定為組建的一部分時看到此錯誤,請考慮使用 C++ 套件管理員 vcpkg 來安裝及建置連結庫。 vcpkg 支援大量且成長 的第三方連結庫清單,並設定成功建置所需的所有組態屬性和相依性,作為專案的一部分。