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++.