Freigeben über


Linkertoolwarnung LNK4210

'Abschnitt'-Abschnitt vorhanden; es sind möglicherweise unbehandelte statische Initialisierer oder Terminatoren vorhanden

Im Code wurden statische Initialisierungen oder Terminatoren implementiert, der CRT oder ein entsprechendes Element (das die statischen Initialisierungen oder Terminatoren ausführen muss) wird jedoch beim Anwendungsstart nicht ausgeführt. Codebeispiele, die dieses Szenario verursachen, umfassen:

  • Globale Klassenvariablen mit einem Konstruktor, Destruktor oder einer virtuellen Funktionstabelle.

  • Globale Variablen, die mit einer von der Kompilierungszeit nicht unterstützten Konstanten initialisiert werden.

Führen Sie zur Behebung dieses Problems einen der folgenden Schritte aus:

  • Entfernen Sie den gesamten Code mit statischen Initialisierungen.

  • /NOENTRY sollte nicht verwendet werden. Nach dem Entfernen von /NOENTRY müssen Sie möglicherweise auch msvcrt.lib, libcmt.lib oder libcmtd.lib zur Linkerbefehlszeile hinzufügen.

  • Fügen Sie der Linkerbefehlszeile msvcrt.lib, libcmt.lib oder libcmtd.lib hinzu.

  • Entfernen Sie beim Wechsel von der /clr:pure-Kompilierung nach /clr die /ENTRY-Option aus der Linkerzeile. Dadurch wird die CRT-Initialisierung aktiviert, sodass beim Anwendungsstart statische Initialisierungen ausgeführt werden können.

  • Wenn das Projekt mit /ENTRY erstellt wurde und an /ENTRY eine andere Funktion als _DllMainCRTStartup übergeben wurde, muss die Funktion CRT_INIT aufrufen. Weitere Informationen erhalten Sie unter Verhalten der Laufzeitbibliothek und im Knowledge Base-Artikel Q94248, https://support.microsoft.com/default.aspx?scid=kb;en-us;94248.

Die /GS-Compileroption erfordert CRT-Startcode.

Siehe auch

Referenz

Festlegen von Linkeroptionen