Aviso das ferramentas de vinculador LNK4210
seção section existe; podem existir inicializadores ou terminadores estáticos não tratados
Comentários
Alguns códigos introduziram inicializadores ou terminadores estáticos, mas o código de inicialização da biblioteca VCRuntime ou equivalente (que precisa executar os inicializadores ou terminadores estáticos) não é executado quando o aplicativo é iniciado. Aqui estão alguns exemplos de código que exigem inicializadores ou terminadores estáticos:
Variável de classe global com um construtor, destruidor ou tabela de funções virtuais.
Variável global inicializada com uma constante que não é de tempo de compilação.
Para corrigir esse problema, tente um dos seguintes métodos:
Remova todo o código com inicializadores estáticos.
Não use /NOENTRY. Depois de remover /NOENTRY, talvez você também precise remover /NODEFAULTLIB da linha de comando do vinculador.
Se o build usar /MT, adicione libcmt.lib, libvcruntime.lib e libucrt.lib à linha de comando do vinculador. Se o build usar /MTd, adicione libcmtd.lib, vcruntimed.lib e libucrtd.lib.
Ao mover da compilação /clr:pure para /clr, remova a opção /ENTRY da linha do vinculador. Isso habilita a inicialização de CRT e permite a execução de inicializadores estáticos na inicialização do aplicativo. A opção do compilador /clr:pure foi preterida no Visual Studio 2015 e está sem suporte no Visual Studio 2017.
A opção do compilador /GS requer inicialização pela função __security_init_cookie
. Essa inicialização é fornecida por padrão no código de inicialização da biblioteca VCRuntime executado em _DllMainCRTStartup
.
- Se o projeto for criado usando /ENTRY, e se for passada uma função diferente de
_DllMainCRTStartup
em /ENTRY, a função deverá chamar_CRT_INIT
para inicializar o CRT. Essa chamada por si só não será suficiente se a DLL usar /GS, exigir inicializadores estáticos ou for chamada no contexto de código MFC ou ATL. Consulte DLLs e o comportamento da biblioteca de runtime do Visual C++ para obter mais informações.