SDL-newbie problem
-
hi!
ich habe mal Mingw installiert, da dass ja IMHO mit SDL funktioniert.
ich habe bloss eine .c-datei (ist ein beispiel zum laden von tux.jpg aus einem deutschen tutorial), die ich in MSYS jetzt compilen will.jetzt mein problem: ich kenne mich nicht mit makefiles und ./configure etc aus. ich habe mit Mingw bis jetzt nur einmal scummvm kompiliert, aber noch nie was eigenes. dazu hatte ich bisher den BCC55. da war das ja simpel, einfach "bcc -tW name.c"...
nun habe ich die .h-files von SDL und SDL_image in das include-dir von mingw kopiert, und MSYS gestartet. "make" macht nix, da ich ja kein makefile habe. und ich glaub mal bei nur einer .c-datei macht ein makefile auch nicht viel sinn, oder?
dann habe ich mal "gcc sdl01.c" eingegeben.
dann kam das hier:$ gcc sdl01.c sdl01.c: In function `SDL_main': sdl01.c:6: error: number of arguments doesn't match prototype c:/mingw/include/SDL_main.h:56: error: prototype declaration
help!
thx in advance
---loki
-
Was steht denn bei dir in der Datei in Zeile 6 ? Ich nehm mal an das du bei einem Funktionsaufruf zu viele oder zu wenig Parameter übergeben hast. Das sagt mir jetzt zumindest die Fehlermeldung. Für genaueres müsstest mal den Quellcode posten.
Tom
-
das ist der quellcode. ist wie gesagt aus einem tut das ich von http://www.libsdl.org/tutorials.php habe...
#include <stdlib.h> #include "SDL.h" #include "SDL_image.h" int main() { // Die 2 bereits bekannten Surfaces deklarieren SDL_Surface *display; SDL_Surface *image; // Deklaration des destination-rect und des source-rect SDL_Rect drect; SDL_Rect srect; // init video stuff if ( SDL_Init( SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "SDL konnte nicht initialisiert werden: %s\n", SDL_GetError()); exit(1); } atexit(SDL_Quit); // init screen display = SDL_SetVideoMode( 640,480, 8, SDL_SWSURFACE); if ( display == NULL ) { fprintf(stderr, "Konnte kein Fenster 640x480 px oeffnen: %s\n", SDL_GetError()); exit(1); } // Bild laden image = IMG_Load("tux.jpg"); if (image == NULL) { fprintf(stderr, "Das Bild konnte nicht geladen werden: %s\n", SDL_GetError()); exit(-1); } // Bildgroesse zu Debuggingzwecke ausgeben fprintf(stdout,"Debug: Bild-Surface-Groesse: %i x %i Pixel\n", image->w,image->h); // Setzen des Quellbereichs srect.x = 0; srect.y = 0; srect.w = (image->w)/2; // das gesamte Bild srect.h = image->h; // das gesamte Bild // Setzen des Zielbereichs drect.x = 200; drect.y = 100; drect.w = (image->w)/2; drect.h = image->h; // kopiere surface auf display-surface SDL_BlitSurface(image, &srect, display, &drect); // den veränderten Bildschirm-Bereich auffrischen SDL_UpdateRects(display,1,&drect); SDL_Delay(3000); // Das Bitmap-Surface löschen SDL_FreeSurface(image); return 0; }
-
Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Da ist auf den ersten Blick nicht viel zu erkennen. Sollte eigentlich funktionieren so wie es ist. Hab allerdings schon lange nix mehr mit SDL gemacht, könnte sich vielleicht was geändert haben.
-
ist wenigstens mein compiling-ansatz richtig?
ich habe wie gesagt:
-mingw und msys sowie gcc etc installiert.
-die .h-includes von sdl und sdl_image nach C:\mingw\include kopiert.
-msys gestartet
-in den projektordner gewechselt
-"gcc sdl01.c" eingegeben...
-
hi,
ich hab zwar nichts direkt zum thema, aber was meint ihr:
-wie schnell kann man SDL lernen, bzw so dass man ein einfaches 2d - moorhuhn-spiel programmieren kann??
-ist es überhaup zu empfehlen wenn mann im Borland c++ Builder nich nicht allzuviele erfahrungen hat (hab bis jeztt in der schule fast nur console programmiert.und falls jemand schon so ein ahnliches spiel programmiert hat wäre es nett wennn er sich mal melden könnte.
thx johony
-
@loki85:
Probier mal "int main(int argc, char *argv[])" anstatt "int main()". Bei mir meckert der Compiler (Windows, VC++) auch immer, wenn ich versuche, ein SDL-Programm zu übersetzen, und nur "main()" schreibe.
-
johony schrieb:
ich hab zwar nichts direkt zum thema, aber was meint ihr:
-wie schnell kann man SDL lernen,Das geht IMHO recht schnell. In ein paar tagen müsstest du die Grundlagen draufhaben. Benutze die Doku.
johony schrieb:
so dass man ein einfaches 2d - moorhuhn-spiel programmieren kann??
Kommt drauf an, wie gut du C/C++ coden kannst. wenn du SDL drauf hast, die Doku verwenden kannst, google kennst, die Suchfunktion nutzen kannst und ungefähr eine Ahnung hast wie du das Spiel aufbaust dann geht auch das recht schnell.
johony schrieb:
-ist es überhaup zu empfehlen wenn mann im Borland c++ Builder nich nicht allzuviele erfahrungen hat (hab bis jeztt in der schule fast nur console programmiert.
Verstehe ich jetzt nicht was du da meinst. Ich glaube du verwechselst da was. (SDL hat nix mit Windowsprogrammierung zu tun). SDL kannst du auch in Konsolen-Anwendungen benutzen.
-
jetzt gibt er mir folgenden output:
$ gcc sdl01.c C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0xfa):sdl01.c: undefined reference to `SDL_Init' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x103):sdl01.c: undefined reference to `SDL_GetError' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x132):sdl01.c: undefined reference to `SDL_Quit' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x15b):sdl01.c: undefined reference to `SDL_SetVideoMode' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x169):sdl01.c: undefined reference to `SDL_GetError' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x19d):sdl01.c: undefined reference to `IMG_Load' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x1ab):sdl01.c: undefined reference to `SDL_GetError' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x27b):sdl01.c: undefined reference to `SDL_UpperBlit' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x295):sdl01.c: undefined reference to `SDL_UpdateRects' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x2a1):sdl01.c: undefined reference to `SDL_Delay' C:/DOKUME~1/.../LOKALE~1/Temp/cc6naaaa.o(.text+0x2ac):sdl01.c: undefined reference to `SDL_FreeSurface' /mingw/lib/libmingw32.a(main.o)(.text+0x97):main.c: undefined reference to `WinMain@16'
sieht aus, als hätte ich die SDL-library falsch eingebunden. aber wieso falsch?
-
Hm, linkst Du die Library denn überhaupt mit? Beim gcc musst Du die Bibliotheken doch (soweit ich mich erinnere...) explizit mit -l angeben. Oder hast Du irgendwo anders entsprechende Compiler-Flags gesetzt?
-
Hast du überhaupt ein Konsolenprojekt angelegt?
-
jo, jetzt wirds kompliziert...
also: ich habe kein makefile, und die flags kann ich ja (IMHO) nur im makefile angeben, oder? (wie gesagt, ich habe mehr oder weniger keine ahnung vom make etc...)
kann ich die library auch als commandline im MSYS angeben?und wie soll ich unter MSYS/MinGW ein konsolenprojekt anlegen?
und nochwas: welche endung hat die library eigentlich? klar, die includes sind .h
aber die lib? dll? oder auch .h? oder .lib oder sogar .obj
??????plz help the n00b!!!!
-
loki1985 schrieb:
und wie soll ich unter MSYS/MinGW ein konsolenprojekt anlegen?
Musst du, soweit ich weiss, nicht.
loki1985 schrieb:
und nochwas: welche endung hat die library eigentlich? klar, die includes sind .h
aber die lib? dll? oder auch .h? oder .lib oder sogar .obj
??????Ich glaub .a oder .o oder so.
Ich würde dir empfehlen devc++ zu nehmen.
Das ist 'ne kostenlose IDE für mingw und da ist das irgentwie einfacher (man muss sich nur das SDL Package downloaden und dann ein neues SDL Projekt erstellen).
-
@loki:
Du solltest Flags auch auf der Kommandozeile angeben können. Probier mal das:
gcc sdl01.c -lSDLmain -lSDL
Das müsste, soweit alles richtig installiert ist, eigentlich funktionieren. Ansonsten wird er sich wohl beschweren, dass er nicht weiss, was SDL und SDLmain sein sollen.
Edit: Vielleicht hilft Dir auch diese Seite weiter (bin gerade darüber gestolpert): http://www.spacejack.org/games/mingw/mingw-sdl.html. Da wird u.a. auf das Problem mit "WinMain@16" eingegangen.
-
Saugie schrieb:
Ich würde dir empfehlen devc++ zu nehmen.
Das ist 'ne kostenlose IDE für mingw und da ist das irgentwie einfacher (man muss sich nur das SDL Package downloaden und dann ein neues SDL Projekt erstellen).
ok, habe mir devc++ gesaugt, und installiert...
habe mir das sdl-"devpak" gezogen und einfach mal in den ordner "DevPaks" verschoben. richtig so?
danach habe ich alle .h-file aus der SDL-library/include nach devc++/include kopiert. soweit richtig?nur finde ich unter den templates nirgends ein "SDL template"...
???
hilfe!
-
@loki
ich würde dir vom devpack abraten, soweit ich weis gibt es nur mit der version 1.2.4 und die aktuelle version ist 1.2.7 http://www.libsdl.org/download-1.2.php
und für die paar zeilen brauchst du kein template http://www.libsdl.org/intro.de/usinginit.html
http://www.libsdl.org/intro.de/usingvideo.html
-
okay, ich habe durch das autoupdate nach laden einer neuen serverliste das DevPak bekommen, und habe das template kompiliert. funktioniert!
ich denke ich werde jetzt, wo ich gesehen habe, dass die installation von SDL scheinbar doch möglich ist, intensiv SDL lernen...
vielen dank an alle für die hilfe!
nur noch eins: kann mir jemand vielleicht noch die exakten schritte der installation von SDL für mingw posten?
wäre super, damit ich meine probleme in zukunft selber lösen kann...
big thanx,
---loki
-
@asgard: supi! die page hat mein problem behoben! jetzt kann ich mit SDL auch unter mingw was anfangen! vielen dank!!!
-
kann mir jemand sagen, wie ich SDL statisch in eine exe linken kann??? (per commandline in MSYS!)
ich weiss, die meisten von euch halten davon nix, aber ich will das mal ausprobieren...