Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.11.2014, 14:43

Nur Theater mit SDL2.0.3 und CodeBlocks - Windows8

Hallo ...
Ich weis einfach nicht mehr weiter, ich versuche seit wochen Code::Blocks SDL2 fähig zu machen.

Leider finde ich im Netz nur noch SDL 2.0.3 und habe es folgendermaßen runtergeladen:

Develope:
SDL2-devel-2.0.3-mingw.tar.gz (MinGW 32/64-bit)

Windows:
SDL2-2.0.3-win32-x64.zip

Dann develope geöffnet und x86_64-w64-mingw32 entpackt.
CodeBlocks(mingw) geöffnet compiler/setting den path und alles zugewisen - linker auch..

linkersetting/other options ...
-lmingw32 -lSDL2main -lSDL2 -lSDL2_image

und bin:
bin/sdl2.dll ins das project verzeichnis kopieren

!!! SO JETZ KOMMT WAS, WAS JEDER BESTIMMT HAT !!!

will man dann ein einfaches project ausführen bekommt man folgede fehlermeldung:

-> WINAPIFAMILY NOT FOUND / in SDL_platform.h

Heute habe ich im netz ganz zufällig ein forum gelesen wo man gesagt hat, das wäre ein Bug !
weiter unten fand ich dann INTERNET GOLD ! -> eine gefixte SDL_platform.h

https://hg.libsdl.org/SDL/raw-file/e217e…/SDL_platform.h
-> einfach in include einfügen und ersetzen ;)

zusätzlich habe ich dann noch eine sdl2_image runtergeladen

-> auch hier sdl2_image.lib in lib und sdl_image.h in include und alle anderen daten aus

so jetz kann ich compilern ... und bekomme folgende fehlermelung:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
||=== Build: Debug in AndroGame (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `SDL_main':|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|9|undefined reference to `SDL_Init'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|12|undefined reference to `SDL_CreateWindow'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|13|undefined reference to `SDL_CreateRenderer'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|14|undefined reference to `SDL_RWFromFile'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|14|undefined reference to `SDL_LoadBMP_RW'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|16|undefined reference to `SDL_CreateTextureFromSurface'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|20|undefined reference to `SDL_WaitEvent'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|29|undefined reference to `SDL_RenderCopy'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|30|undefined reference to `SDL_RenderPresent'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|33|undefined reference to `SDL_DestroyTexture'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|34|undefined reference to `SDL_FreeSurface'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|35|undefined reference to `SDL_DestroyRenderer'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|36|undefined reference to `SDL_DestroyWindow'|
C:\Users\jjj\Desktop\Game\AndroGame\main.cpp|37|undefined reference to `SDL_Quit'|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\..\..\..\libmingw32.a(main.o):main.c:(.text.startup+0xa7)||undefined reference to `WinMain@16'|
||=== Build failed: 15 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|


-> und das ist der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <SDL.h>
#include <SDL_image.h>

int main(int argc, char ** argv)
{
    bool quit = false;
    SDL_Event event;

    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window * window = SDL_CreateWindow("SDL2 Displaying Image",
        SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
    SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0);
    SDL_Surface * image = SDL_LoadBMP("image.bmp");
    SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer,
        image);

    while (!quit)
    {
       SDL_WaitEvent(&event);

       switch(event.type)
       {
       case SDL_QUIT:
           quit = true;
           break;
       }

       SDL_RenderCopy(renderer, texture, NULL, NULL);
       SDL_RenderPresent(renderer);
    }

    SDL_DestroyTexture(texture);
    SDL_FreeSurface(image);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}


könnt ihr mir weiterhelfen ? :dash: :hmm:

hab auch schon alle verschiedende versionen probiert: x86,64,32...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

15.11.2014, 14:55

Die Bibliothek erwartet offenbar eine Funktion namens "WinMain", die üblich für Win32-Anwendungen ist. Du hast aber eine "main", die üblich für Win32-Konsolen-Anwendungen ist. Hast Du mal die SDL2main weggelassen? Aus dieser wird offenbar referenziert. Für was genau die noch da ist, weiß ich nicht, aber bis sich ein SDL-User hier meldet wäre es den Versuch wert.

Ich würde Dir außerdem VisualStudio statt CodeBlocks an's Herz legen ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

3

15.11.2014, 15:02

Scheinbar findet der Linker aber die .lib/.a Dateien nicht. Sicher, dass der Pfad korrekt ist und dort hin verweist, wo die entsprechenden .lib/.a Dateien liegen?

Zur SDL2main gibt es dieses Statement:

Zitat

SDL2main provides SDL_main(), which is a global entry point for all SDL apps. You are not required/forced to use it, but is presence is based on the variety of the systems SDL supports. Windows uses WinMain(), Linux uses main(), Android needs JNI and some Java to actually use SDL, so SDL_main() makes things a little easier.

Und Visual Studio hat die leidige Eigenschaft, sich niemals wieder vollständig vom System entfernen zu lassen, einer der Gründe, wieso ich auch nur noch Code::Blocks nutze.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

15.11.2014, 20:09

Ich würde Dir außerdem VisualStudio statt CodeBlocks an's Herz legen ;)

Jap, also ich verwend Code::Block z.B. unter Linux, aber wer für Windows entwickeln will und irgendetwas Anderes als Visual Studio verwendet, der ist imo einfach nur selbst schuld... ;)
Gibt es einen bestimmten Grund, wieso du Code::Blocks verwenden willst?

Und Visual Studio hat die leidige Eigenschaft, sich niemals wieder vollständig vom System entfernen zu lassen, einer der Gründe, wieso ich auch nur noch Code::Blocks nutze.

Ich hör von solchen Problemen nun wirklich zum ersten Mal; was genau lässt sich denn nicht wieder entfernen?

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

15.11.2014, 21:55

VS installiert ja jede Menge Kram mit, z.B. diverse DLLs / ActiveX Controls und eine Menge Registry Einträge und Verweise auf Verzeichnisse.
Zudem so Sachen wie das .Net Framework, SWL Server, Silverlight & Co. und anderes. Und obwohl natürlich die Hauptkomponenten deinstalliert werden, muss man solche Sachen dann (wenn es geht) manuell (in der richtigen Reihenfolge) deinstallieren. Und dann darf man Verzeichnis Reste suchen. Aber die Registry Keys bekommt man eig. gar nicht weg, es sei denn man hat Lust und traut sich, die ganze Registry durchzugucken. Also ich fand es ziemlich lästig und hab mit Code::Blocks alles was ich brauche und kann echt nicht behaupten, dass mir VS fehlen würde. Deswegen musste ich über deine Aussage

Zitat

aber wer für Windows entwickeln will und irgendetwas Anderes als Visual Studio verwendet, der ist imo einfach nur selbst schuld... ;)
schon etwas lächeln... :)
Wenn dich das Thema interessiert, such ruhig mal ein wenig im Internet, ich bin nicht der einzige, den das ganz schön auf die Nerven ging.
Aber wir schweifen ab... :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

6

16.11.2014, 12:41

IT WORKS !!!! :thumbup: :thumbsup:

Hab alles nochmal neu gemacht und die SDL_IMAGE gekickt (werde mich später drum kümmern)
___________________________________
-i686-w64-mingw32 auf desktop gepackt,
-lib und include verbunden
-sdl_platform.h ersetzt Hier
-linkersetting: -lmingw32 -lSDL2main -lSDL2
-neuen ordner erstellt (desktop)
-bin/sdl.dll in neuen ordner kopieren
-neues project/emptyfile
-name: Test
-add new file/emtyfile
-speichern als main.c

copy code: lazyfoo test

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <SDL.h>
#include <stdio.h>
 8) 
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main( int argc, char* args[] )
{
    //The window we'll be rendering to
    SDL_Window* window = NULL;

    //The surface contained by the window
    SDL_Surface* screenSurface = NULL;

    //Initialize SDL
    if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
    }
    else
    {
        //Create window
        window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
        if( window == NULL )
        {
            printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
        }
        else
        {
            //Get window surface
            screenSurface = SDL_GetWindowSurface( window );

            //Fill the surface white
            SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) );

            //Update the surface
            SDL_UpdateWindowSurface( window );

            //Wait two seconds
            SDL_Delay( 2000 );
        }
    }

    //Destroy window
    SDL_DestroyWindow( window );

    //Quit SDL subsystems
    SDL_Quit();

    return 0;
}


Build and Run ... and have fun ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

16.11.2014, 18:00

Ich glaube nicht, dass "main.c" ein sonderlich guter Name ist (weil Compiler manchmal abhängig vom File-Suffix die Syntax interpretieren) und ich glaube, dass Zeile 3 falsch ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige