SDL mit VC++ Express 2005 statisch linken



  • hi

    kann mir jemand bitte sagen, wie man mit der kostenlosen Version SDL Projekte statisch linkt?

    Wenn ich auf Codegenerierung komm und von Multithreaded-Debug-DLL (/MDd) auf Multithreaded-Debug (/MTd) klicke und kompiliere, dann kommt das:

    1>main.obj : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(char const *)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@PBD@Z) ist bereits in msvcprtd.lib(MSVCP80D.dll) definiert.
    1>main.obj : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) ist bereits in msvcprtd.lib(MSVCP80D.dll) definiert.
    1>main.obj : error LNK2005: "public: char const * __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::c_str(void)const " (?c_str@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) ist bereits in msvcprtd.lib(MSVCP80D.dll) definiert.
    1>msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) ist bereits in LIBCMTD.lib(typinfo.obj) definiert.
    1>msvcrt.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) ist bereits in LIBCMTD.lib(typinfo.obj) definiert.
    1>msvcrt.lib(MSVCR80.dll) : error LNK2005: _isspace ist bereits in LIBCMTD.lib(_ctype.obj) definiert.
    1>msvcrt.lib(MSVCR80.dll) : error LNK2005: ___iob_func ist bereits in LIBCMTD.lib(_file.obj) definiert.
    1>msvcrt.lib(MSVCR80.dll) : error LNK2005: _fclose ist bereits in LIBCMTD.lib(fclose.obj) definiert.
    1>msvcrt.lib(MSVCR80.dll) : error LNK2005: _exit ist bereits in LIBCMTD.lib(crt0dat.obj) definiert.
    1>LIBCMTD.lib(crt0init.obj) : warning LNK4098: Standardbibliothek "msvcrt.lib" steht in Konflikt mit anderen Bibliotheken; /NODEFAULTLIB:Bibliothek verwenden.
    

    😞

    Es ist im DEBUG Modus und nciht im release 😉

    ich bitte um hilfe,
    roland



  • IMHO musst du auch die STD Libraries entsprechend linken.



  • phlox81 schrieb:

    IMHO musst du auch die STD Libraries entsprechend linken.

    kannst du mir bitte sagen, wie ich es unter der express version mache?
    Unter Codegenerierung? Wo danach?

    Danke schon im Voraus.

    Mfg



  • Hm, ne. Ich benutze Code::Blocks und nicht die MS IDE.



  • phlox81 schrieb:

    Hm, ne. Ich benutze Code::Blocks und nicht die MS IDE.

    Unter Vista funktioniert Code:Blocks nicht 😕
    ich hab ja vista 😞



  • Dann würde ich google dazu mal fragen. Kann dich aber jetzt auch mal ins Compilerforum verschieben, da das ja nix mit GUI oder so zu tun hat.



  • Dieser Thread wurde von Moderator/in phlox81 aus dem Forum Andere GUIs - Qt, GTK+, wxWidgets in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • phlox81 schrieb:

    Hm, ne. Ich benutze Code::Blocks und nicht die MS IDE.

    ok, kannst du es mir nun bitte erklären, wie ich statisch linken kann? 🙂
    Hab doch CB auf vista draufgebracht^^

    mfg



  • Musst du mal in den Projekteinstellungen schauen.
    Aber da ich den gcc und nicht den MS Compiler verwende, werde ich es dir auch so einfach nicht für C::B unter Vista sagen können 😉

    Auch weiss ich nicht, ob das die Lösung ist. Evtl. ist es auch was ganz anderes.



  • mingw32-g++.exe: installation problem, cannot exec `cc1plus': No such file or directory
    

    kommt wenn ich

    //The headers
    #include "SDL/SDL.h"
    //#include "SDL/SDL_image.h"
    #include <string>
    
    //Screen attributes
    const int SCREEN_WIDTH = 640;
    const int SCREEN_HEIGHT = 480;
    const int SCREEN_BPP = 32;
    
    //The frames per second
    const int FRAMES_PER_SECOND = 10;
    
    //The dimenstions of the stick figure
    const int FOO_WIDTH = 64;
    const int FOO_HEIGHT = 205;
    
    //The direction status of the stick figure
    const int FOO_RIGHT = 0;
    const int FOO_LEFT = 1;
    
    //The surfaces
    SDL_Surface *foo = NULL;
    SDL_Surface *screen = NULL;
    
    //The event structure
    SDL_Event event;
    
    //The areas of the sprite sheet
    SDL_Rect clipsRight[ 4 ];
    SDL_Rect clipsLeft[ 4 ];
    
    //The stick figure
    class Foo
    {
        private:
        //The offset
        int offSet;
    
        //Its rate of movement
        int velocity;
    
        //Its current frame
        int frame;
    
        //Its animation status
        int status;
    
        public:
        //Initializes the variables
        Foo();
    
        //Handles input
        void handle_events();
    
        //Moves the stick figure
        void move();
    
        //Shows the stick figure
        void show();
    };
    
    //The timer
    class Timer
    {
        private:
        //The clock time when the timer started
        int startTicks;
    
        //The ticks stored when the timer was paused
        int pausedTicks;
    
        //The timer status
        bool paused;
        bool started;
    
        public:
        //Initializes variables
        Timer();
    
        //The various clock actions
        void start();
        void stop();
        void pause();
        void unpause();
    
        //Gets the timer's time
        int get_ticks();
    
        //Checks the status of the timer
        bool is_started();
        bool is_paused();
    };
    
    SDL_Surface *load_image( std::string filename )
    {
        //The image that's loaded
        SDL_Surface* loadedImage = NULL;
    
        //The optimized surface that will be used
        SDL_Surface* optimizedImage = NULL;
    
        //Load the image
        loadedImage = SDL_LoadBMP( filename.c_str() );
    
        //If the image loaded
        if( loadedImage != NULL )
        {
            //Create an optimized surface
            optimizedImage = SDL_DisplayFormat( loadedImage );
    
            //Free the old surface
            SDL_FreeSurface( loadedImage );
    
            //If the surface was optimized
            if( optimizedImage != NULL )
            {
                //Color key surface
                SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF ) );
            }
        }
    
        //Return the optimized surface
        return optimizedImage;
    }
    
    void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL )
    {
        //Holds offsets
        SDL_Rect offset;
    
        //Get offsets
        offset.x = x;
        offset.y = y;
    
        //Blit
        SDL_BlitSurface( source, clip, destination, &offset );
    }
    
    void set_clips()
    {
        //Clip the sprites
        clipsRight[ 0 ].x = 0;
        clipsRight[ 0 ].y = 0;
        clipsRight[ 0 ].w = FOO_WIDTH;
        clipsRight[ 0 ].h = FOO_HEIGHT;
    
        clipsRight[ 1 ].x = FOO_WIDTH;
        clipsRight[ 1 ].y = 0;
        clipsRight[ 1 ].w = FOO_WIDTH;
        clipsRight[ 1 ].h = FOO_HEIGHT;
    
        clipsRight[ 2 ].x = FOO_WIDTH * 2;
        clipsRight[ 2 ].y = 0;
        clipsRight[ 2 ].w = FOO_WIDTH;
        clipsRight[ 2 ].h = FOO_HEIGHT;
    
        clipsRight[ 3 ].x = FOO_WIDTH * 3;
        clipsRight[ 3 ].y = 0;
        clipsRight[ 3 ].w = FOO_WIDTH;
        clipsRight[ 3 ].h = FOO_HEIGHT;
    
        clipsLeft[ 0 ].x = 0;
        clipsLeft[ 0 ].y = FOO_HEIGHT;
        clipsLeft[ 0 ].w = FOO_WIDTH;
        clipsLeft[ 0 ].h = FOO_HEIGHT;
    
        clipsLeft[ 1 ].x = FOO_WIDTH;
        clipsLeft[ 1 ].y = FOO_HEIGHT;
        clipsLeft[ 1 ].w = FOO_WIDTH;
        clipsLeft[ 1 ].h = FOO_HEIGHT;
    
        clipsLeft[ 2 ].x = FOO_WIDTH * 2;
        clipsLeft[ 2 ].y = FOO_HEIGHT;
        clipsLeft[ 2 ].w = FOO_WIDTH;
        clipsLeft[ 2 ].h = FOO_HEIGHT;
    
        clipsLeft[ 3 ].x = FOO_WIDTH * 3;
        clipsLeft[ 3 ].y = FOO_HEIGHT;
        clipsLeft[ 3 ].w = FOO_WIDTH;
        clipsLeft[ 3 ].h = FOO_HEIGHT;
    }
    
    bool init()
    {
        //Initialize all SDL subsystems
        if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
        {
            return false;
        }
    
        //Set up the screen
        screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
    
        //If there was an error in setting up the screen
        if( screen == NULL )
        {
            return false;
        }
    
        //Set the window caption
        SDL_WM_SetCaption( "Animation Test", NULL );
    
        //If everything initialized fine
        return true;
    }
    
    bool load_files()
    {
        //Load the sprite sheet
        foo = load_image( "foo.png" );
    
        //If there was a problem in loading the sprite
        if( foo == NULL )
        {
            return false;
        }
    
        //If everything loaded fine
        return true;
    }
    
    void clean_up()
    {
        //Free the surface
        SDL_FreeSurface( foo );
    
        //Quit SDL
        SDL_Quit();
    }
    
    Foo::Foo()
    {
        //Initialize movement variables
        offSet = 0;
        velocity = 0;
    
        //Initialize animation variables
        frame = 0;
        status = FOO_RIGHT;
    }
    
    void Foo::handle_events()
    {
        //If a key was pressed
        if( event.type == SDL_KEYDOWN )
        {
            //Set the velocity
            switch( event.key.keysym.sym )
            {
                case SDLK_RIGHT: velocity += FOO_WIDTH / 4; break;
                case SDLK_LEFT: velocity -= FOO_WIDTH / 4; break;
            }
        }
        //If a key was released
        else if( event.type == SDL_KEYUP )
        {
            //Set the velocity
            switch( event.key.keysym.sym )
            {
                case SDLK_RIGHT: velocity -= FOO_WIDTH / 4; break;
                case SDLK_LEFT: velocity += FOO_WIDTH / 4; break;
            }
        }
    }
    
    void Foo::move()
    {
        //Move
        offSet += velocity;
    
        //Keep the stick figure in bounds
        if( ( offSet < 0 ) || ( offSet + FOO_WIDTH > SCREEN_WIDTH ) )
        {
            offSet -= velocity;
        }
    }
    
    void Foo::show()
    {
        //If Foo is moving left
        if( velocity < 0 )
        {
            //Set the animation to left
            status = FOO_LEFT;
    
            //Move to the next frame in the animation
            frame++;
        }
        //If Foo is moving right
        else if( velocity > 0 )
        {
            //Set the animation to right
            status = FOO_RIGHT;
    
            //Move to the next frame in the animation
            frame++;
        }
        //If Foo standing
        else
        {
            //Restart the animation
            frame = 0;
        }
    
        //Loop the animation
        if( frame >= 4 )
        {
            frame = 0;
        }
    
        //Show the stick figure
        if( status == FOO_RIGHT )
        {
            apply_surface( offSet, SCREEN_HEIGHT - FOO_HEIGHT, foo, screen, &clipsRight[ frame ] );
        }
        else if( status == FOO_LEFT )
        {
            apply_surface( offSet, SCREEN_HEIGHT - FOO_HEIGHT, foo, screen, &clipsLeft[ frame ] );
        }
    }
    
    Timer::Timer()
    {
        //Initialize the variables
        startTicks = 0;
        pausedTicks = 0;
        paused = false;
        started = false;
    }
    
    void Timer::start()
    {
        //Start the timer
        started = true;
    
        //Unpause the timer
        paused = false;
    
        //Get the current clock time
        startTicks = SDL_GetTicks();
    }
    
    void Timer::stop()
    {
        //Stop the timer
        started = false;
    
        //Unpause the timer
        paused = false;
    }
    
    void Timer::pause()
    {
        //If the timer is running and isn't already paused
        if( ( started == true ) && ( paused == false ) )
        {
            //Pause the timer
            paused = true;
    
            //Calculate the paused ticks
            pausedTicks = SDL_GetTicks() - startTicks;
        }
    }
    
    void Timer::unpause()
    {
        //If the timer is paused
        if( paused == true )
        {
            //Unpause the timer
            paused = false;
    
            //Reset the starting ticks
            startTicks = SDL_GetTicks() - pausedTicks;
    
            //Reset the paused ticks
            pausedTicks = 0;
        }
    }
    
    int Timer::get_ticks()
    {
        //If the timer is running
        if( started == true )
        {
            //If the timer is paused
            if( paused == true )
            {
                //Return the number of ticks when the the timer was paused
                return pausedTicks;
            }
            else
            {
                //Return the current time minus the start time
                return SDL_GetTicks() - startTicks;
            }
        }
    
        //If the timer isn't running
        return 0;
    }
    
    bool Timer::is_started()
    {
        return started;
    }
    
    bool Timer::is_paused()
    {
        return paused;
    }
    
    int main( int argc, char* args[] )
    {
        //Quit flag
        bool quit = false;
    
        //Initialize
        if( init() == false )
        {
            return 1;
        }
    
        //Load the files
        if( load_files() == false )
        {
            return 1;
        }
    
        //Clip the sprite sheet
        set_clips();
    
        //The frame rate regulator
        Timer fps;
    
        //The stick figure
        Foo walk;
    
        //While the user hasn't quit
        while( quit == false )
        {
            //Start the frame timer
            fps.start();
    
            //While there's events to handle
            while( SDL_PollEvent( &event ) )
            {
                //Handle events for the stick figure
                walk.handle_events();
    
                //If the user has Xed out the window
                if( event.type == SDL_QUIT )
                {
                    //Quit the program
                    quit = true;
                }
            }
    
            //Move the stick figure
            walk.move();
    
            //Fill the screen white
            SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0xFF, 0xFF, 0xFF ) );
    
            //Show the stick figure on the screen
            walk.show();
    
            //Update the screen
            if( SDL_Flip( screen ) == -1 )
            {
                return 1;
            }
    
            //Cap the frame rate
            if( fps.get_ticks() < 1000 / FRAMES_PER_SECOND )
            {
                SDL_Delay( ( 1000 / FRAMES_PER_SECOND ) - fps.get_ticks() );
            }
        }
    
        //Clean up
        clean_up();
    
        return 0;
    }
    

    kompiliere...


Anmelden zum Antworten