Ошибка средств компоновщика LNK2038

Несоответствие, обнаруженное для "name": значение "value_1" не соответствует значению "value_2" в filename.obj

Несоответствие символов обнаружено компоновщиком. Эта ошибка означает, что различные части приложения, включая библиотеки или другой код объекта, с которыми ссылается приложение, используйте конфликтующие определения символа. Определение несоответствия прагмы используется для определения таких символов и обнаружения конфликтующих значений.

Возможные причины и способы устранения

Эта ошибка может возникать, когда файл объекта в проекте устарел. Прежде чем попробовать другие решения этой ошибки, выполните чистую сборку, чтобы убедиться, что файлы объектов являются текущими.

Visual Studio определяет следующие символы, чтобы предотвратить связывание несовместимого кода, что может вызвать ошибки во время выполнения или другое непредвиденное поведение.

  • _MSC_VER Указывает основные и незначительные номера версий компилятора Microsoft C++ (MSVC), используемые для создания приложения или библиотеки. Код, скомпилированный с помощью одной версии MSVC, несовместим с кодом, скомпилированный с помощью версии с разными основными и дополнительными номерами версий. Дополнительные сведения см _MSC_VER . в предопределенных макросах.

    Если вы связываетесь с библиотекой, которая несовместима с версией MSVC, которую вы используете, и вы не можете получить или создать совместимую версию библиотеки, можно использовать более раннюю версию компилятора для сборки проекта: измените свойство Platform Toolset проекта на более ранний набор инструментов. Дополнительные сведения см. в статье Практическое руководство. Изменение требуемой версии .NET 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

Если эта ошибка возникает при попытке настроить стороннюю библиотеку в рамках сборки, рассмотрите возможность использования vcpkg, диспетчера пакетов C++ для установки и сборки библиотеки. vcpkg поддерживает большой и растущий список сторонних библиотек и задает все свойства конфигурации и зависимости, необходимые для успешных сборок в рамках проекта.

См. также

Ошибки и предупреждения средств компоновщика