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