[C/C++] SDL (Simple DirectMedia Layer) definiert main um

Übersicht Andere Programmiersprachen Allgemein

Neue Antwort erstellen

Trust

Betreff: [C/C++] SDL (Simple DirectMedia Layer) definiert main um

BeitragDi, Apr 09, 2013 22:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

wollte mich mal mit SDL befassen also habe ich mir die aktuellste Version herunter geladen und eingerichtet.
Doch der Compilererror " multiple definition of `main' " lies sich nicht beheben.
Beim stundenlangem suchen im Web laß ich immer nur die selben Ratschläge, dass doch die Reinfolge in den Linkeroptionen beachtet werden soll: " -lmingw32 -lSDLmain -lSDL " was alles nichts half.
Habe es mit "orwell dev c++" und Code::Blocks versucht. Bei beiden der selbe Fehler.

Bis mir zufällig aufgefallen ist, dass in der SDL_main.h das Wort "main" zu "SDL_main" umdefiniert wird.
( #define main SDL_main )
Deshalb natürlich auch die Fehlermeldung " multiple definition of `main' " .
Wieso das so gehandhabt wird, ist mir ein Rätsel! Der übersichtshalber wäre es doch sicher besser gewesen wenn dem SDL-Nutzer gesagt würde, er soll seine main-Funktion als SDL_main-Deklarieren.

Naja, nichts desto trotz habe ich keine Ahnung wie ich das Problem beheben kann.

Habe es dann einfach mal mit " #define SDL_main main " versucht, was auch funktionierte.

Aber das kann doch nicht die Lösung sein!

Kennt sich vielleicht jemand mit SDL aus, und könnte mir sagen was man da machen kann?

Danke!

Mfg Trust
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

BtbN

BeitragDi, Apr 09, 2013 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
SDL bringt seine eigene main funktion mit, und ruft von da aus SDL_main auf. Deshalb wird main umdefiniert, damit der code unabhängig davon funktioniert.

Trust

BeitragMi, Apr 10, 2013 7:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja genau. Und wie kann ich diese Fehlermeldung vermeiden?
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
  • Zuletzt bearbeitet von Trust am Mi, Apr 10, 2013 7:44, insgesamt einmal bearbeitet
 

feider

ehemals "Decelion"

BeitragMi, Apr 10, 2013 7:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin

Ich habe das hier

Zitat:
Compiling program, which uses SDL must be done this way:
g++ -o helloworld -Dmain=SDL_main helloworld.cpp -lmingw32 -lSDLmain -lSDL


hier gefunden.

Behebt das dein Problem?

Grüße
feider

Trust

BeitragMi, Apr 10, 2013 7:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich auch schon versucht mit -Dmain=SDL_main , macht leider irgendwie keinen Unterschied.
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
 

feider

ehemals "Decelion"

BeitragMi, Apr 10, 2013 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann nutze einfach SDL_main statt main. Sollte keinen so großen Unterschied machen, hoffe ich

Trust

BeitragMi, Apr 10, 2013 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Bleibt mir wohl nichts anderes übrig vorerst.
Ist aber unschön sowas.
Falls ich oder jemand anderes mal eine Lösung findet, wäre es nett wenn er sie hier mitteilen würde.
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
 

feider

ehemals "Decelion"

BeitragFr, Apr 19, 2013 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Benutzt du Windows?
Wenn ja, ich bin hier durch zufall auf etwas gestoßen:
http://de.wikibooks.org/wiki/S...-Anwendung
Zitat:

Anmerkung: Wer unter Windows Probleme beim Kompilieren hat, sollte Folgendes vor der main-Funktion benutzen:

Code: [AUSKLAPPEN]
 
#ifdef _WIN32
#undef main
#endif



Wer immer noch Fehlermeldungen bekommt, sollte es hiermit versuchen:

Code: [AUSKLAPPEN]
 
#ifdef _WIN32
#pragma comment(lib, "SDL.lib")
#pragma comment(lib, "SDLmain.lib")
#endif




Gruß
feider

Starwar

BeitragFr, Apr 19, 2013 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verwende folgende Lösung (stammt aus irgendeinem Tutorial):
Code: [AUSKLAPPEN]
#ifdef __MINGW32__
#undef main /* Prevents SDL from overriding main() */
#endif

int main(int argc, char *argv[]) {
//...
}
 

feider

ehemals "Decelion"

BeitragSa, Apr 20, 2013 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Starwar: Was machst du dann, wenn der Nutzer einen anderen Compiler als MinGW unter Windows nutzt?

Starwar

BeitragMo, Apr 22, 2013 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Im ffmpeg Tutorial von dranger.com (so ziemlich Standardliteratur zu ffmpeg) wird es so gemacht. Ob es allgemein funktioniert weiß ich nicht, da ich selbst MinGW verwende.
Ich werde das mal beim Tutorialersteller anfragen, vielleicht hat er ja nähere Informationen, ob es sich dabei um ein MinGW-spezifisches oder ein Windowsspezifisches Problem handelt.
MFG

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group