libreria engine c++ c visual-c++ sdl sdl-2

c++ - engine - SDL2: LNK1561: el punto de entrada debe estar definido



libreria sdl (5)

Quiero compilar este código:

#include <SDL.h> int main(int argc, char* argv[]) { return 0; }

Pero no se puede vincular: Error 1 error LNK1561: entry point must be defined

Hay un código extraño en esta biblioteca: http://hg.libsdl.org/SDL/file/75726efbf679/include/SDL_main.h

#define main SDL_main

También agregué SDL2.lib;SDL2main.lib a Configuración del proyecto => Vinculador => Entrada.

¿Qué puedo hacer para ejecutar este proyecto?
VS 2012 SP3, proyecto C ++ vacío.


Como escribió un tinky_winki

Haga clic con el botón derecho en el nombre del proyecto -> Propiedades -> pestaña Expandir Vinculador -> Sistema -> Subsistema: asegúrese de que sea Consola (/ SUBSISTEMA: CONSOLA)

Pero si no espera una consola con ventana, simplemente use, / SUBSYSTEM: WINDOWS


De acuerdo con este hilo en Dream.In.Code:

Haga clic con el botón derecho en el nombre del proyecto -> Propiedades -> pestaña Expandir Vinculador -> Sistema -> Subsistema: asegúrese de que sea Console (/SUBSYSTEM:CONSOLE)

Alternativamente, si desea ocultar la ventana de la consola o está depurando una aplicación de multiproceso , debería configurar el Subsistema en Window (/SUBSYSTEM:WINDOW) lugar.


He encontrado que la configuración / SUBSISTEMA: CONSOLA es solo la mitad de la solución. La segunda mitad es agregar SDL_MAIN_HANDLED a tus definiciones adicionales. La pista que utilicé para resolver esto se puede encontrar en SDL_main.h . La configuración de SDL_MAIN_HANDLED indica a los archivos de encabezado de SDL que ya ha proporcionado una función main y no desea que redefina su propio punto de entrada.


Proyecto >> Propiedades >> Vinculador >> Avanzado >> punto de entrada = principal y aplicar


¡NO #undef main ! Si bien es una muy mala práctica en el lado de SDL para redefinirlo, tienen buenas razones: WinMain se define en el lado de la biblioteca y se usa para ejecutar algún código de inicio, lo que ayuda con los problemas de compatibilidad. (incluso más cuando se utilizan diferentes implementaciones de SDL, como Steam''s o la transferencia a otras plataformas como Android)

Entonces, ¿qué debería hacer? Cuando esté en Windows, siempre debe incluir SDL2main.lib antes de SDL2.lib y asegurarse de que su main esté en el formato:

int main(int argc, char* argv[]) // CORRECT void main(int argc, char* argv[]) // WRONG int main(int, char**) // MAY BE CORRECT

Fuente: SDL2 Windows Preguntas frecuentes