Share via


Advertencia de las herramientas del vinculador LNK4210

la sección section existe; podría haber terminadores o inicializadores estáticos no controlados

Comentarios

Algún código ha introducido inicializadores o terminadores estáticos, pero el código de inicio de la biblioteca VCRuntime o su equivalente (que debe ejecutar los inicializadores o terminadores estáticos) no se ejecuta cuando se inicia la aplicación. Estos son algunos ejemplos del código que requiere inicializadores o terminadores estáticos:

  • Variable de clase global con un constructor, un destructor o una tabla de funciones virtuales.

  • Variable global inicializada con una constante no en tiempo de compilación.

Para corregir este problema, intente con alguna de las opciones siguientes:

  • Quite todo el código con inicializadores estáticos.

  • No use /NOENTRY. Después de quitar /NOENTRY, es posible que también tenga que quitar /NODEFAULTLIB de la línea de comandos del enlazador.

  • Si la compilación usa /MT, agregue libcmt.lib, libvcruntime.lib y libucrt.lib a la línea de comandos del enlazador. Si la compilación usa /MTd, agregue libcmtd.lib, vcruntimed.lib y libucrtd.lib.

  • Al pasar de la compilación /clr:pure a /clr, quite la opción /ENTRY de la línea del enlazador. Esto habilita la inicialización de CRT y permite que los inicializadores estáticos se ejecuten en el inicio de la aplicación. La opción del compilador /clr:pure está en desuso en Visual Studio 2015 y no se admite en Visual Studio 2017.

La opción del compilador /GS requiere la inicialización por parte de la función __security_init_cookie. Esta inicialización se proporciona de manera predeterminada en el código de inicio de la biblioteca VCRuntime que se ejecuta en _DllMainCRTStartup.

  • Si el proyecto se compila mediante /ENTRY y si se pasa una función distinta de _DllMainCRTStartup a /ENTRY, la función debe llamar a _CRT_INIT para inicializar CRT. Por sí sola, esta llamada no basta si el archivo DLL usa /GS, requiere inicializadores estáticos o se la llama en el contexto de código MFC o ATL. Para más información, consulte Archivos DLL y comportamiento de la biblioteca en tiempo de ejecución de Visual C++.

Consulte también