Erro do vinculador LNK2038: Incompatibilidade detectada no modo de liberação
-
27-09-2019 - |
Pergunta
Estou tentando portar um pequeno aplicativo meu do Win XP e VS 2005 para vencer 7 e vs 2010.
O aplicativo compila e é executado sem problemas no modo de depuração, no entanto, no modo de liberação, recebo o seguinte erro:
pcrecpp.lib(pcrecpp.obj) : error LNK2038: mismatch detected for
'_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in LoginDlg.obj
Onde devo começar a verificar?
Solução
Seu aplicativo está sendo compilado no modo de liberação, mas você está vinculando a versão de depuração do PCRE, que tinha /MTD (ou similar), causando assim a incompatibilidade no nível de depuração do iterador no CRT.
Recompile PCRE no modo de liberação para corresponder ao seu próprio aplicativo.
o detect_mismatch
Pragma No VS 2010, é o que faz com que esse erro seja emitido.
Ver http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx (Pesquise por _iterator_debug_level)
Outras dicas
Eu tive o mesmo erro. No meu caso, a solução é fácil: eu tinha um projeto A, dependendo de outro projeto B. B tinha uma definição de pré -processador _debug no modo de depuração e não.
Basta adicionar _debug ao projeto A (Project-> Properties-> C ++-> Preprocessador-> Definições de pré-processador) e terminar.
Meu problema era que o projeto dependente usado "Use conjunto de caracteres de vários bytes"
Sob Generl-> Conjunto de caracteres. Enquanto outro projeto tinha valor "não definido"
Isso também pode ser causado pela definição da definição de pré -processador _HAS_ITERATOR_DEBUGGING=0
no projeto B e não em um onde a produz um Lib usado por B.