Linkertoolwarnung LNK4210

Abschnittsabschnitt vorhanden; möglicherweise sind unbehandelte statische Initialisierer oder Terminatoren vorhanden.

Hinweise

Einige Code hat statische Initialisierer oder Terminatoren eingeführt, aber der Startcode der VCRuntime-Bibliothek oder dessen Entsprechung (die statische Initialisierer oder Terminatoren ausführen muss) wird nicht ausgeführt, wenn die Anwendung gestartet wird. Hier sind einige Beispiele für Code, der statische Initialisierer oder Terminatoren erfordert:

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

  • Die globale Variable wurde mit einer nicht kompilierten Zeitkonstante initialisiert.

Um dieses Problem zu beheben, probieren Sie eine der folgenden Aktionen aus:

  • Entfernen Sie den gesamten Code mit statischen Initialisierern.

  • Verwenden Sie "/NOENTRY" nicht. Nachdem Sie /NOENTRY entfernt haben, müssen Sie möglicherweise auch /NODEFAULTLIB aus der Befehlszeile des Linkers entfernen.

  • Wenn Ihr Build "/MT" verwendet, fügen Sie "libcmt.lib", "libvcruntime.lib" und "libucrt.lib" zu Ihrer Linker-Befehlszeile hinzu. Wenn Ihr Build "/MTd" verwendet, fügen Sie "libcmtd.lib", "vcruntimed.lib" und "libucrtd.lib" hinzu.

  • Wenn Sie von "/clr:pure compilation" zu "/clr" wechseln, entfernen Sie die Option "/ENTRY " aus der Linker-Zeile. Dies ermöglicht die CRT-Initialisierung und ermöglicht die Ausführung statischer Initialisierer beim Starten der Anwendung. Die Option "/clr:pure compiler" ist in Visual Studio 2015 veraltet und wird in Visual Studio 2017 nicht unterstützt.

Für die /GS-Compileroption ist eine Initialisierung durch die __security_init_cookie Funktion erforderlich. Diese Initialisierung wird standardmäßig im Startcode der VCRuntime-Bibliothek bereitgestellt, der ausgeführt _DllMainCRTStartupwird.

  • Wenn Ihr Projekt mit /ENTRY erstellt wird und /ENTRY eine andere _DllMainCRTStartupFunktion als übergeben wird, muss die Funktion aufgerufen _CRT_INIT werden, um die CRT zu initialisieren. Dieser Aufruf allein reicht nicht aus, wenn Ihre DLL /GS verwendet, statische Initialisierer erfordert oder im Kontext von MFC- oder ATL-Code aufgerufen wird. Weitere Informationen finden Sie unter DLLs und Visual C++-Laufzeitbibliotheksverhalten .

Siehe auch