Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Outoilua CodeBlocksissa

DumTom [07.01.2011 05:20:17]

#

Minkä takia SDL_imagen asennus onnistuu käsipelillä mutta sitten taas SDL_gfx:än ei?
Vastaavat jutut tein molemmissa.
Eli kopsin .h tiedostot projektiin ja .dll tiedostot projektiin ja libbien sisällön laitoin mingw\libbiin....
Toki säädin linkkerin asetukset kohilleen.
Heti kun rotozoomin laittaa includeen niin alkaa no such file or directory SDL.h:sta.
Voisiko joku viisas kirjoittaa oppaan SDL:än ja lisäkirjastojen laitosta CodeBlocksiin?

Deffi [07.01.2011 05:49:10]

#

SDL_rotozoom.h:sta löytyy rivi:

#include "SDL.h"

Tämä viittaa siihen, että SDL_rotozoom.h:n pitää olla samassa hakemistossa SDL.h:n kanssa, eli hakemistossa mingw\include\SDL\ eikä mingw\include\. Jos lisäät projektiisi vain tuon tiedoston, niin muuta kyseinen rivi muotoon #include <SDL/SDL.h>

DumTom [08.01.2011 02:50:39]

#

#include <cstdlib>
#include <SDL.h>
#include <SDL_image.h>
//#include <SDL_mixer.h>
#include <SDL_rotozoom.h>	// SDL_gfx Rotozoom
#include <SDL_gfxPrimitives.h>// SDL_gfx Primitives
#include <SDL_framerate.h>		// SDL_gfx Framerate Manager


int main ( int argc, char** argv )
{
    // initialize SDL video
    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        printf( "Unable to init SDL: %s\n", SDL_GetError() );
        return 1;
    }

    // make sure SDL cleans up before exit
    atexit(SDL_Quit);

    // create a new window
    SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,SDL_HWSURFACE|SDL_DOUBLEBUF);
    if ( !screen )
    {
        printf("Unable to set 640x480 video: %s\n", SDL_GetError());
        return 1;
    }

    // load an image
    SDL_Surface* bmp = SDL_LoadBMP("cb.bmp");
    if (!bmp)
    {
        printf("Unable to load bitmap: %s\n", SDL_GetError());
        return 1;
    }
    SDL_Surface* joku = IMG_Load("cb.png");
    if (!joku)
    {
        printf("Unable to load png: %s\n", SDL_GetError());
        return 1;
    }

    // centre the bitmap on screen
    SDL_Rect dstrect;
    dstrect.x = (screen->w - joku->w) / 2;
    dstrect.y = (screen->h - joku->h) / 2;

    // program main loop
    bool done = false;
    while (!done)
    {
        // message processing loop
        SDL_Event event;
        while (SDL_PollEvent(&event))
        {
            // check for messages
            switch (event.type)
            {
                // exit if the window is closed
            case SDL_QUIT:
                done = true;
                break;

                // check for keypresses
            case SDL_KEYDOWN:
                {
                    // exit if ESCAPE is pressed
                    if (event.key.keysym.sym == SDLK_ESCAPE)
                        done = true;
                    break;
                }
            } // end switch
        } // end of message processing

        // DRAWING STARTS HERE

        // clear screen
        SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));

        // draw bitmap
        SDL_BlitSurface(joku, 0, screen, &dstrect);

        // DRAWING ENDS HERE

        // finally, update the screen :)
        SDL_Flip(screen);
    } // end main loop

    // free loaded bitmap
    SDL_FreeSurface(bmp);
    SDL_FreeSurface(joku);

    // all is well ;)
    printf("Exited cleanly\n");
    return 0;
}

Kääntäjän vastaus on


ld.exe cannot find -lSDL_mixer


1 errors ja sitä rataa

Mitä pitäisi tehdä?

Metabolix [08.01.2011 03:19:14]

#

Pitäisi
a) ottaa SDL_mixer pois projektin asetuksista, jos et käytä sitä, tai
b) kopioida tiedosto libSDL_mixer.a kääntäjän lib-hakemistoon.

DumTom [08.01.2011 09:16:11]

#

Kiitos.Vihdoin kaikki lisäkirjastot toimii ja voin siirtää megaprojektini devcpp:n puolelta codeblocksiin. 6 päivää kyselin ja yritin ja vihdoin onnistuu. 7. päivänä ei levätä vaan koodataan......:)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta