¿Cómo se obtiene un programa SDL mínimo para compilar y enlazar en Visual Studio 2008 Express?

StackOverflow https://stackoverflow.com/questions/396183

  •  29-08-2019
  •  | 
  •  

Pregunta

Estoy tratando de utilizar SDL en C ++ con Visual Studio 2008 Express. El programa siguiente se compila pero no enlace:

#include <SDL.h>

int main(int argc, char *argv[])
{
    return 0;
}

El error del enlace es:

LINK : fatal error LNK1561: entry point must be defined

Me sale este independientemente de cómo o si me enlace con SDL.lib y SDLmain.lib. Definición de main como main() o SDL_main() da el mismo error, con o sin extern "C".

Edit: He resuelto esto, al no incluir en SDL.h main.cpp - una refactorización hice independiente del problema. Una solución similar sería #undef main justo antes de la definición de la función.

¿Fue útil?

Solución

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

Es necesario crear un proyecto Win32 en lugar de un proyecto de consola. Un proyecto Win32 espera una función WinMain como un programa punto de entrada. SDLmain.lib contiene este punto de entrada y el archivo de cabecera SDL_main.h tiene una macro que vuelve a asignar su función principal a SDL_main. Esta función es llamada por el punto de entrada en la biblioteca SDLmain.

La función principal debe tener la firma siguiente:

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

También es necesario incluir SDL.h antes de la declaración de su función principal, y hay que enlazar a ambos SDL.lib y SDLmain.lib.

Parece que usted está haciendo esto. Por lo tanto, mi conjetura es que usted tiene una configuración de proyecto de consola. Por lo tanto, el enlazador está buscando una función principal, para llamar, pero se está haciendo reasigna a SDL_main por la macro SDL_main.h . Por lo tanto, el enlazador no puede encontrar un punto de entrada y abandona!

Otros consejos

A mi me ayudó a añadir las siguientes líneas antes de main ():

#ifdef _WIN32
#undef main
#endif

Wikipedia en alemán también sugiere añadir estas líneas en su lugar:

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

A pesar de que todavía tenía errores de enlace cuando traté segunda solución.

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 usted tiene un archivo .def, eliminarlo.

Además, si se ha configurado el proyecto para compilar con Unicode y no como MBCS, usted tiene que utilizar wmain () en vez de main ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top