Partilhar via


Erro das Ferramentas de Vinculador LNK2038

incompatibilidade detectada para 'name': value'value_1' não corresponde ao 'value_2' em filename.obj

Uma incompatibilidade de símbolo foi detectada pelo vinculador. Esse erro indica que diferentes partes de um aplicativo, incluindo bibliotecas ou outro código de objeto ao qual o aplicativo se vincula, usam definições conflitantes do símbolo. O pragma de detecção incompatível é usado para definir esses símbolos e detectar seus valores conflitantes.

Possíveis causas e soluções

Esse erro pode ocorrer quando um arquivo de objeto em seu projeto está desatualizado. Antes de tentar outras soluções para esse erro, execute um build limpo para garantir que os arquivos de objeto sejam atualizados.

O Visual Studio define os símbolos a seguir para impedir a vinculação de código incompatível, o que pode causar erros em tempo de execução ou outro comportamento inesperado.

  • _MSC_VER Indica os números de versão principal e secundária do compilador Microsoft C++ (MSVC) usado para criar um aplicativo ou biblioteca. O código compilado usando uma versão do MSVC é incompatível com o código compilado usando uma versão que tem diferentes números de versão principal e secundária. Para obter mais informações, confira _MSC_VER em Macros predefinidas.

    Se você estiver vinculando a uma biblioteca que não é compatível com a versão do MSVC que está usando e não puder adquirir ou criar uma versão compatível da biblioteca, poderá usar uma versão anterior do compilador para compilar seu projeto: altere a propriedade Platform Toolset do projeto para o conjunto de ferramentas anterior. Saiba mais sobre Como modificar a estrutura de destino e o conjunto de ferramentas da plataforma.

  • _ITERATOR_DEBUG_LEVEL Indica o nível de recursos de segurança e depuração habilitados na Biblioteca Padrão do C++. Esses recursos podem alterar a representação de determinados objetos da Biblioteca Padrão C++ e, assim, torná-los incompatíveis com aqueles que usam diferentes recursos de segurança e depuração. Para obter mais informações, consulte _ITERATOR_DEBUG_LEVEL.

  • RuntimeLibrary Indica a versão do tempo de execução C++ Standard Library e C usada por um aplicativo ou biblioteca. O código que usa uma versão da Biblioteca Padrão C++ ou do runtime C é incompatível com o código que usa uma versão diferente. Para obter mais informações, consulte /MD, /MT, /LD (usar biblioteca em tempo de execução).

  • _PPLTASKS_WITH_WINRT Indica que o código que usa a PPL (Parallel Patterns Library) está vinculado a objetos compilados usando uma configuração diferente para a opção do compilador /ZW. /ZW( suporta C++/CX.) O código que usa ou depende da PPL deve ser compilado usando a mesma /ZW configuração usada no restante do aplicativo.

Certifique-se de que os valores desses símbolos sejam consistentes em todos os projetos em sua solução do Visual Studio e também que sejam consistentes com o código e as bibliotecas aos quais seu aplicativo se vincula.

Problemas de biblioteca de terceiros e vcpkg

Se você vir esse erro ao tentar configurar uma biblioteca de terceiros como parte de seu build, considere usar o vcpkg, um gerenciador de pacotes C++, para instalar e compilar a biblioteca. O vcpkg dá suporte a uma lista de bibliotecas de terceiros grande e crescente e define todas as propriedades de configuração e dependências necessárias para builds bem-sucedidos como parte do projeto.

Confira também

Erros e avisos das ferramentas de vinculador