sdl2 libreria library biblioteca c++ visual-studio sdl

c++ - libreria - ¿Cómo se obtiene un programa SDL mínimo para compilar y vincular en visual studio 2008 express?



sdl2 2.0 7 (3)

El enlazador no puede encontrar el punto de entrada. Lo que significa que su función main () no se reconoce como el punto de entrada.

Si tiene un archivo .def, elimínelo.

Además, si ha configurado su proyecto para compilar con Unicode y no como mbcs, debe usar wmain () en lugar de main ().

Intento usar SDL en C ++ con Visual Studio 2008 Express. El siguiente programa compila pero no enlaza:

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

El error de enlace es:

LINK : fatal error LNK1561: entry point must be defined

Lo consigo independientemente de cómo o si me enlace con SDL.lib y SDLmain.lib. Definir main como main() o SDL_main() da el mismo error, con o sin extern "C" .

Editar: Lo resolví al no incluir SDL.h en main.cpp, una refactorización que hice independientemente del problema. Una solución similar sería #undef main derecha antes de definir la función.


No tengo VC ++ disponible en este momento, pero he visto este problema varias veces.

Necesita crear un proyecto Win32 en lugar de un proyecto de consola. Un proyecto Win32 espera una función WinMain como punto de entrada del programa. SDLmain.lib contiene este punto de entrada y el archivo de encabezado SDL_main.h tiene una macro que reasigna la función principal a SDL_main. Esta función es llamada por el punto de entrada en la biblioteca principal de SDL.

La función principal debe tener la siguiente firma:

int main(int argc, char *argv[])

También se requiere incluir SDL.h antes de la declaración de su función principal, y usted necesita vincular tanto a SDL.lib como a SDLmain.lib.

Parece que estás haciendo esto. Entonces, supongo que tienes una configuración de proyecto de consola. Por lo tanto, el vinculador está buscando una función principal para llamar, pero se está reasignando a SDL_main mediante la macro SDL_main.h . Entonces, el enlazador no puede encontrar un punto de entrada y se da por vencido.


Para mí, me ayudó a agregar las siguientes líneas antes de main ():

#ifdef _WIN32 #undef main #endif

La Wikipedia alemana también sugiere agregar estas líneas:

#ifdef _WIN32 #pragma comment(lib, "SDL.lib") #pragma comment(lib, "SDLmain.lib") #endif

Aunque todavía tenía errores de enlace cuando probé la segunda solución.