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

![]() |
TrustBetreff: [C/C++] SDL (Simple DirectMedia Layer) definiert main um |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dann nutze einfach SDL_main statt main. Sollte keinen so großen Unterschied machen, hoffe ich | ||
![]() |
Trust |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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[]) { //... } |
||
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Starwar: Was machst du dann, wenn der Nutzer einen anderen Compiler als MinGW unter Windows nutzt? | ||
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group