Por que a biblioteca MSCVRT gera conflitos na hora do link? [duplicado
-
23-09-2019 - |
Pergunta
Esta pergunta já tem uma resposta aqui:
Estou construindo um projeto no Visual C ++ 2008, que é um exemplo de aplicativo baseado em MFC para uma biblioteca estática de classe C ++ que usarei em meu próprio projeto em breve. Ao construir a configuração de depuração, recebo o seguinte:
AVISO LNK4098: DefaultLib 'msvcrt' conflita com o uso de outros LIBs; Use /NodefaultLib: Biblioteca
Depois de usar a opção recomendada (adicionando "msvcrt" ao campo "Ignorar a biblioteca específica" nas configurações do vinculador do projeto para a configuração de depuração), o programa vincula e funciona bem. No entanto, gostaria de descobrir por que esse conflito ocorreu, por que tenho que ignorar uma biblioteca crítica e, se espero problemas mais tarde, se adicionar o ignorar, ou o que acontece se eu não o fizer (porque o Programa crie de qualquer maneira).
Ao mesmo tempo, a configuração de liberação avisa:
Aviso LNK4075: Ignorando '/editandContinue' devido a 'especificação'/opt: icf '
AVISO LNK4098: DefaultLib 'msvcrtd' conflita com o uso de outros LIBs; Use /NodefaultLib: Biblioteca
Acho que o sufixo "D" significa que esta é a versão de depuração do tempo de execução do VC ++, não tenho idéia do porquê que isso é usado desta vez. De qualquer forma, adicionar "msvcrtd" ao campo de ignorar causa muitos erros de link do formulário:
Erro lnk2001: símbolo externo não resolvido __imp___crtdbgreportw
Qualquer percepção muito apreciada.
Solução
Isso geralmente acontece quando você vincula uma biblioteca estática que usa outra versão do tempo de execução do VC ++ (C++ ->Code Generation->Runtime Library
definindo nas propriedades do projeto).
Outras dicas
Isso geralmente aconteceu comigo quando eu estava (inadvertidamente) misturando diferentes sabores do RTL, como (como parece estar no seu caso) depuração e liberação ou MT e ST.