user3425888
user3425888

Reputation: 11

SDL2: undefined references to strange functions

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

Upvotes: 1

Views: 1501

Answers (2)

Bread Product
Bread Product

Reputation: 31

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.

Upvotes: 0

dogiordano
dogiordano

Reputation: 714

You need to link against winmm.lib.

Try adding

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

to your source.

Upvotes: 2

Related Questions