Erreur des outils Éditeur de liens LNK2038

incompatibilité détectée pour ' name' : la valeur 'value_1' ne correspond pas à la valeur 'value_2' dans filename.obj

Une incompatibilité de symbole a été détectée par l'éditeur de liens. Cette erreur indique que différentes parties d’une application, y compris des bibliothèques ou d’autres codes d’objet auxquels l’application est liée, utilisent des définitions conflictuelles du symbole. Le pragma de détection d’incompatibilité est utilisé pour définir ces symboles et détecter leurs valeurs conflictuelles.

Causes possibles et solutions

Cette erreur peut se produire lorsqu'un fichier objet de votre projet est obsolète. Avant d'essayer d'autres solutions pour résoudre cette erreur, exécutez une build propre pour vérifier que les fichiers objets sont actualisés.

Visual Studio définit les symboles ci-dessous pour empêcher la liaison du code incompatible, qui peut provoquer des erreurs d'exécution ou d'autres comportements inattendus.

  • _MSC_VER Indique les numéros de version principale et mineure du compilateur Microsoft C++ (MSVC) utilisé pour générer une application ou une bibliothèque. Le code compilé à l’aide d’une version de MSVC n’est pas compatible avec le code compilé à l’aide d’une version qui comporte des numéros de version principaux et secondaires différents. Pour plus d’informations, consultez _MSC_VER les macros prédéfinies.

    Si vous établissez une liaison à une bibliothèque qui n’est pas compatible avec la version de MSVC que vous utilisez et que vous ne pouvez pas acquérir ou générer une version compatible de la bibliothèque, vous pouvez utiliser une version antérieure du compilateur pour générer votre projet : remplacez la propriété Platform Toolset du projet par l’ensemble d’outils précédent. Pour plus d’informations, consultez Comment modifier la version cible de .Net Framework et l’ensemble d’outils de la plateforme.

  • _ITERATOR_DEBUG_LEVEL Indique le niveau de sécurité et de débogage des fonctionnalités activées dans la bibliothèque C++ Standard. Ces fonctionnalités peuvent modifier la représentation de certains objets de la bibliothèque C++ standard et ainsi les rendre incompatibles avec ceux qui utilisent d’autres fonctionnalités de sécurité et de débogage. Pour plus d’informations, consultez _ITERATOR_DEBUG_LEVEL.

  • RuntimeLibrary Indique la version de la bibliothèque standard C++ et du runtime C utilisés par une application ou une bibliothèque. Le code qui utilise une version de la bibliothèque standard C++ ou de la bibliothèque Runtime C est incompatible avec le code qui utilise une autre version. Pour plus d’informations, consultez l’article /MD, /MT, /LD (Utiliser la bibliothèque Runtime).

  • _PPLTASKS_WITH_WINRT Indique que le code qui utilise la bibliothèque de modèles parallèles (PPL) est lié aux objets compilés à l’aide d’un paramètre différent pour l’option du compilateur /ZW . (/ZW prend en charge C++/CX.) Le code qui utilise ou dépend du PPL doit être compilé à l’aide du même /ZW paramètre utilisé dans le reste de l’application.

Vérifiez que les valeurs de ces symboles sont cohérentes dans tous les projets de votre solution Visual Studio, et qu’elles sont également cohérentes avec le code et les bibliothèques vers lesquelles votre application est liée.

Problèmes de bibliothèque tiers et vcpkg

Si vous voyez cette erreur lorsque vous essayez de configurer une bibliothèque tierce dans le cadre de votre build, envisagez d’utiliser vcpkg, un gestionnaire de package C++, pour installer et générer la bibliothèque. vcpkg prend en charge une liste importante et croissante de bibliothèques tierces, et définit toutes les propriétés et dépendances de configuration requises pour les builds réussies dans le cadre de votre projet.

Voir aussi

Erreurs et avertissements des outils Éditeur de liens