2008-12-28 10 views
7

Estoy tratando de usar SDL en C++ con Visual Studio 2008 Express. El programa siguiente se compila pero no lo hace de enlace:¿Cómo se obtiene un programa SDL mínimo para compilar y vincular en visual studio 2008 express?

#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 

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

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

Respuesta

6

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 su 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 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 estás haciendo esto. Entonces, supongo que tiene una configuración de proyecto de consola. Por lo tanto, el vinculador está buscando una función principal para llamar, pero está siendo reasignado a SDL_main por la macro SDL_main.h. Entonces, el enlazador no puede encontrar un punto de entrada y se da por vencido.

+2

Sí, cambia de una aplicación de Windows (a través de Propiedades del proyecto/Propiedades de configuración/Enlazador/Sistema/SubSistema) funciona. Gracias. (Terminé con una solución diferente, sin embargo) –

0

El vinculador 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, quítelo.

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

3

Para mí ayudó a añadir las siguientes líneas antes de main():

#ifdef _WIN32 
#undef main 
#endif 

German Wikipedia 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

Cuestiones relacionadas