1

i have written this small piece of Code for testing purposes:

#include <iostream>
#include "SDL2/SDL.h"

int main(int argc, char* argv[]) {

    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
            printf("Unable to initialize SDL: %s\n", SDL_GetError());
        return 1;
    }

    // Betriebssystem ermitteln
    std::string PlatFormString;
    PlatFormString = SDL_GetPlatform();
    std::cout << PlatFormString << "\n";

    // Separator ermitteln
    char Separator = '/';
    if (PlatFormString == "Windows") {
        Separator = '\\';
    }
    std::cout << "Separator: " << Separator << "\n";

    // Installationspfad ermitteln
    std::string InstallPath;
    InstallPath = SDL_GetBasePath();
    std::cout << InstallPath << "\n";

    // Benutzerverzeichnis ermitteln
    char*   UserPath;
    UserPath = SDL_GetPrefPath("TFF", "Blaster");
    if (UserPath == nullptr) {
        std::cout << "No Userpath aviable !! \n";
    }
    else {
        std::cout << UserPath << "\n";
    }

    SDL_Quit();

    return 0;
};

Under Linux eerthing works fine. But under Windows, i am getting these strange errors ...

-------------- Build: Debug in Test (compiler: GNU GCC Compiler)---------------

g++.exe -LD:\mingw64 -LD:\mingw64\bin -LD:\mingw64\include -LD:\mingw64\include\SDL2 -LD:\mingw64\lib -o bin\Debug\Test.exe obj\Debug\src\Test.o  -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lSDL2_mixer  ..\..\mingw64\lib\libSDL2main.a ..\..\mingw64\lib\libSDL2.a
..\..\mingw64\lib\libSDL2.a(SDL_systimer.o): In function `timeSetPeriod':
/Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x64/../src/timer/windows/SDL_systimer.c:58: undefined reference to `__imp_timeBeginPeriod'
/Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x64/../src/timer/windows/SDL_systimer.c:52: undefined reference to `__imp_timeEndPeriod'
/Users/slouken/release/SDL/SDL2-2.0.3-source/foo-x64/../src/timer/windows/SDL_systimer.c:58: undefined reference to `__imp_timeBeginPeriod'

and so on. I dont know whats going on there. Can anyone help ? I#m using Codeblocks 13.12, minGW64 (4.8.1), SDL 2.0.3 and Windows 7 64bit

  • I'm not sure if it is related, but why you are linking both `-lSDL2main -lSDL2` and `..\..\mingw64\lib\libSDL2main.a ..\..\mingw64\lib\libSDL2.a`? It seems like you are linking each lib twice. Try eliminating the later and see what happens. – TalesM Mar 17 '14 at 22:24

2 Answers2

2

You need to link against winmm.lib.

Try adding

#pragma comment(lib, "winmm.lib")

to your source.

dogiordano
  • 691
  • 6
  • 13
0

I am posting this about a year later but for the future searchers here is the solution. Replace libSDL2.a with libSDL2.dll.a and it will compile just fine. The issue has something to do with dynamic and static linking with a windows machine or something I personally do I understand it completely but it works.

I came across the solution by reading this article: http://tech.yipp.ca/sdl/how-to-fix-libsdla-undefined-reference/

However this goes on a whole other solution I read between the lines or more particularly.

This is a really a rare problem that would occur only when you try to link with libSDL.a static library instead of the dynamic library SDL.dll. Then you have to add those library that SDL.dll normally links against which are the three above.