Come si ottiene un programma SDL minimo per compilare e collegare in Visual Studio 2008 Express?

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

  •  29-08-2019
  •  | 
  •  

Domanda

Sto cercando di utilizzare SDL in C ++ con Visual Studio 2008 Express. Il seguente programma viene compilato, ma non si link:

#include <SDL.h>

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

L'errore link è:

LINK : fatal error LNK1561: entry point must be defined

ottengo questo indipendentemente da come o se collego con SDL.lib e SDLmain.lib. Definire main come main() o SDL_main() dà lo stesso errore, con o senza extern "C".

Edit: Ho risolto questo non includendo SDL.h in main.cpp - un refactoring ho fatto indipendente dal problema. Una soluzione simile potrebbe essere quella di #undef main destra prima di definire la funzione.

È stato utile?

Soluzione

Non ho VC ++ disponibile al momento, ma ho visto questo problema più volte.

È necessario creare un progetto Win32 in contrapposizione ad un progetto di console. Un progetto Win32 si aspetta un WinMain funzione di un programma punto d'entrata. SDLmain.lib contiene questo punto di ingresso e il file di intestazione SDL_main.h ha una macro che remaps la funzione principale per SDL_main. Questa funzione viene chiamata dal punto di ingresso nella biblioteca SDLmain.

La funzione principale deve avere la seguente firma:

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

Si è inoltre tenuto a includere SDL.h prima della dichiarazione della funzione principale, e avete bisogno di collegare sia SDL.lib e SDLmain.lib.

Sembra che si sta facendo questo. Quindi, la mia ipotesi è che si ha un setup progetto di console. Pertanto, il linker è alla ricerca di una funzione principale di chiamare, ma è sempre rimappato al SDL_main dalla macro SDL_main.h . Così, il linker non riesce a trovare un punto di ingresso e dà in su!

Altri suggerimenti

A me ha aiutato a aggiungere le seguenti righe prima di main ():

#ifdef _WIN32
#undef main
#endif

Wikipedia tedesca suggerisce anche di aggiungere queste righe, invece:

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

Anche se avevo ancora errori di collegamento quando ho provato seconda soluzione.

Il linker non riesce a trovare il punto di ingresso. Il che significa che la funzione main () non è riconosciuto come il punto di ingresso.

Se si dispone di un file .def, rimuoverlo.

Inoltre, se hai impostato il progetto per compilare con unicode e non come MBCS, è necessario utilizzare wmain () al posto di main ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top