I have already used SDL years ago but now I want to use them agani with my student in a School Project (we will design and develop a simple game), but please consider me a newbie.
I tried latest SDL release (SDL 2.28.4 at the time of writing) but according to the build enviroment (Dev-C++, RedPanda-Dev-C++, and Red Panda C++) I had different error messages…
I wonder if I am using 32/64 bit version of SDL2/MiniGW suite or if there are some specific version that I should use.
It seems that SDL 2.28.4 has reference to build release enviroment because I get reference to /Users/valve/release/ as you can see from the logs ‘C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/…/lib/gcc/x86_64-w64-mingw32/10.3.0/…/…/…/…/x86_64-w64-mingw32/bin/ld.exe: C:\Users\stefy\Desktop\SDL2-2.28.4\x86_64-w64-mingw32\lib\libSDL2.a(SDL_windowsevents.o): in function `WIN_WindowProc’:
/Users/valve/release/SDL2/SDL2-2.28.4-source/foo-x64/…/src/video/windows/SDL_windowsevents.c:1311: ’ is ti correct?
Following the code and the command line used…
Most common issue - RedPanda-Dev-C++ I get
C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\stefy\Desktop\SDL2-2.28.4\x86_64-w64-mingw32\lib\libSDL2.a(SDL_hidapi.o): in function `PLATFORM_hid_enumerate':
/Users/valve/release/SDL2/SDL2-2.28.4-source/foo-x64/../src/hidapi/windows/hid.c:388: undefined reference to `__imp_SetupDiGetClassDevsA'
I got it run with a “fresh installed” Dev-C++ 4.9.9.2 and mingw64 12.2.0.
Tools->Compiler Options->Directories
Binaries: Set a path to the bin directory of mingw64
Libraries: Set a path to the lib directory of mingw64
Set a second path to …/SDL2-2.28.4/x86_64-w64-mingw32/lib
C includes: Set a path to mingw64/include
Set a second path to …/SDL2-2.28.4\x86_64-w64-mingw32\include
Tools->Compiler Options-> “Add these commands to the linker command line”
Activate the checkbox and set the following commands:
-lSDL2main -lSDL2
That’s CoInitializeEx from Ole32 (-lOle32). You can find corresponding libraries from your error messages: undefined reference to __imp_CoInitializeEx ==> CoInitializeEx ==> Search | Microsoft Learn ==> Library Ole32.lib
Anyways, it’s strange that your gcc miss link to default libs, the gcc from MSYS2 does not have such problem, maybe you got tweaked/outdated compiler?
It seems that the issue is that I’m using a “static-version” (see: SDL2 linking issue ) of SDL2 thus I have to provides ALL the libraries to the linker. At the moment i can compile by using the following linker options
Yep, I’m aware of this, and I realized I used sdl2-config --static-libs to get all the libs SDL need. So, my assumption on the toolchain issue was wrong, but your gcc 10.3.0 is fairly old tho .
No, the sdl2-config is not a configure, it’s a script used to get installed SDL2’s cflags and/or libs.
You can avoid manual dependency management by using this script in your Makefile. Also the target SDL2::SDL2-static from CMake SDL package will work too.
With dynamic libraries, you don’t need to manually link their dependencies because they are handled by the dll itself. The original poster’s intention was to use a static library.
Anyway, what you’re doing is kinda weird - with CMake you should use the SDL2 package, not link everything by hand…
I share my result because I think it may help other people in the future, this is my set-up for using SDL2 on Win32 with CMake (actually it uses the file named CMakeLists.txt for project configuration)
this configuration build the project without using the sdl2-config script but it configure the enviroments by setting the SDL2_DIR, SDL2_image_DIR, and SDL2_ttf_DIR variables.
The projct is structured as follow:
libs that contains the unzip content from the SDL2, SDL2_image and SDL2_ttf releases