Condividi tramite


Avviso degli strumenti del linker LNK4210

la sezione section esiste; potrebbero essere presenti inizializzatori statici non gestiti o caratteri di terminazione

Osservazioni:

Alcuni codici hanno introdotto inizializzatori statici o terminatori, ma il codice di avvio della libreria VCRuntime o il relativo equivalente (che deve eseguire gli inizializzatori statici o i caratteri di terminazione) non viene eseguito all'avvio dell'applicazione. Ecco alcuni esempi di codice che richiedono inizializzatori statici o caratteri di terminazione:

  • Variabile di classe globale con un costruttore, un distruttore o una tabella di funzioni virtuali.

  • Variabile globale inizializzata con una costante non in fase di compilazione.

Per risolvere il problema, provare a eseguire una delle operazioni seguenti:

  • Rimuovere tutto il codice con inizializzatori statici.

  • Non usare /NOENTRY. Dopo aver rimosso /NOENTRY, potrebbe essere necessario rimuovere /NODEFAULTLIB dalla riga di comando del linker.

  • Se la compilazione usa /MT, aggiungere libcmt.lib, libvcruntime.lib e libucrt.lib alla riga di comando del linker. Se la compilazione usa /MTd, aggiungere libcmtd.lib, vcruntimed.lib e libucrtd.lib.

  • Quando si passa dalla compilazione /clr:pure a /clr, rimuovere l'opzione /ENTRY dalla riga del linker. Ciò consente l'inizializzazione CRT e consente l'esecuzione di inizializzatori statici all'avvio dell'applicazione. L'opzione del compilatore /clr:pure è deprecata in Visual Studio 2015 e non supportata in Visual Studio 2017.

L'opzione del compilatore /GS richiede l'inizializzazione dalla __security_init_cookie funzione . Questa inizializzazione viene fornita per impostazione predefinita nel codice di avvio della libreria VCRuntime che viene eseguito in _DllMainCRTStartup.

  • Se il progetto viene compilato usando /ENTRY e se /ENTRY viene passato a una funzione diversa da _DllMainCRTStartup, la funzione deve chiamare _CRT_INIT per inizializzare CRT. Questa chiamata da sola non è sufficiente se la DLL usa /GS, richiede inizializzatori statici o viene chiamata nel contesto del codice MFC o ATL. Per altre informazioni, vedere DLL e comportamento della libreria di runtime di Visual C++.

Vedi anche