Linkertoolfehler LNK2038
Nicht übereinstimmende Übereinstimmung für "name": Der Wert "value_1" stimmt nicht mit dem Wert "value_2" in "filename.obj" überein.
Ein Symbolkonflikt wurde vom Linker erkannt. Dieser Fehler weist darauf hin, dass verschiedene Teile einer App, einschließlich Bibliotheken oder anderer Objektcode, mit denen die App verknüpft ist, widersprüchliche Definitionen des Symbols verwenden. Das Erkennen von Unübereinstimmungen wird verwendet, um solche Symbole zu definieren und deren widersprüchliche Werte zu erkennen.
Mögliche Ursachen und Lösungen
Dieser Fehler kann auftreten, wenn eine Objektdatei im Projekt veraltet ist. Bevor Sie andere Lösungen zur Fehlerbehebung ausprobieren, versuchen Sie, einen bereinigten Build auszuführen, um sicherzustellen, dass die Objektdateien aktuell sind.
Visual Studio definiert die folgenden Symbole, um das Verknüpfen von nicht kompatiblem Code zu verhindern, der Laufzeitfehler oder anderes unerwartetes Verhalten verursachen kann.
_MSC_VER
Gibt die Haupt- und Nebenversionsnummern des Microsoft C++-Compilers (MSVC) an, der zum Erstellen einer App oder Bibliothek verwendet wird. Code, der mithilfe einer Version von MSVC kompiliert wird, ist nicht mit Code kompatibel, der mithilfe einer Version mit unterschiedlichen Haupt- und Nebenversionsnummern kompiliert wird. Weitere Informationen finden Sie in_MSC_VER
vordefinierten Makros.Wenn Sie eine Verknüpfung mit einer Bibliothek herstellen, die nicht mit der version von Ihnen verwendeten MSVC kompatibel ist und Sie keine kompatible Version der Bibliothek erwerben oder erstellen können, können Sie eine frühere Version des Compilers verwenden, um Ihr Projekt zu erstellen: Ändern Sie die Platform Toolset-Eigenschaft des Projekts in das frühere Toolset . Weitere Informationen finden Sie unter: Vorgehensweise beim Ändern des Zielframeworks und des Plattformtoolsets.
_ITERATOR_DEBUG_LEVEL
Gibt die Sicherheits- und Debuggingfeatures an, die in der C++-Standardbibliothek aktiviert sind. Diese Funktionen können die Darstellung bestimmter C++-Standardbibliotheksobjekte ändern. Dadurch werden diese möglicherweise mit solchen Objekten inkompatibel, die andere Sicherheits- und Debugfunktionen verwenden. Weitere Informationen finden Sie unter _ITERATOR_DEBUG_LEVEL.RuntimeLibrary
Gibt die Version der C++-Standardbibliothek und C-Laufzeit an, die von einer App oder Bibliothek verwendet wird. Code, der eine Version der C++-Standardbibliothek oder C-Laufzeit verwendet, ist nicht mit Code kompatibel, der eine andere Version verwendet. Weitere Informationen finden Sie unter /MD, /MT, /LD (Laufzeitbibliothek verwenden)._PPLTASKS_WITH_WINRT
Gibt an, dass Code, der die Parallel Patterns Library (PPL) verwendet, mit Objekten verknüpft ist, die mithilfe einer anderen Einstellung für die /ZW-Compileroption kompiliert werden. (/ZW
unterstützt C++/CX.) Code, der von der PPL verwendet oder abhängig ist, muss mithilfe der gleichen/ZW
Einstellung kompiliert werden, die in der restlichen App verwendet wird.
Stellen Sie sicher, dass die Werte dieser Symbole in allen Projekten in Ihrer Visual Studio-Lösung konsistent sind und dass sie mit Code und Bibliotheken konsistent sind, mit denen Ihre App verknüpft ist.
Probleme mit Drittanbieterbibliotheken und vcpkg
Wenn dieser Fehler angezeigt wird, wenn Sie versuchen, eine Drittanbieterbibliothek als Teil Ihres Builds zu konfigurieren, sollten Sie die Verwendung von vcpkg, einem C++-Paket-Manager, in Betracht ziehen, um die Bibliothek zu installieren und zu erstellen. vcpkg unterstützt eine große und wachsende Liste von Drittanbieterbibliotheken und legt alle Konfigurationseigenschaften und Abhängigkeiten fest, die für erfolgreiche Builds im Rahmen Ihres Projekts erforderlich sind.