Author Topic: Code::Blocks don't finds my SDL2 libs  (Read 5239 times)

Offline moevenbaer

  • Single posting newcomer
  • *
  • Posts: 5
Code::Blocks don't finds my SDL2 libs
« on: June 04, 2024, 08:44:29 pm »
Hello to the CB-World,
after some days searching and learning and searching and ... my brain is a little bit confused about that all.  ;)

System: Win 11 - get error linking SDL2-libs:
 ld.exe   can't find -llibSDL2
 ld.exe   can't find -llibSDL2main

I didn't find out what is wrong here in my steps:
  • C:\CODEBLOCKS\ is my folder for all stuff
  • C:\CODEBLOCKS\Codeblocks is installation folder of codeblocks with MinGW in there.
  • Copied content of zip file "codeblocks-20.03mingw-nosetup.zip" to this CodeBlocks installation folder
  • Copied folder SDL2 from SDL2-devel-2.30.3-mingw.zip folder SDL2 found under  SDL2-2.30.3\include to C:\CODEBLOCKS\Codeblocks\MinGW\include\
  • Copied content from lib folder found in SDL2-devel-2.30.3-mingw.zip under  SDL2-2.30.3\lib to C:\CODEBLOCKS\Codeblocks\MinGW\lib\
  • Created a console project for c++ in workspace folder C:\CODEBLOCKS\CB_WSp\
  • Build and went ok (Returncode zero)
  • Added compiler path C:\CODEBLOCKS\Codeblocks\MinGW\include\
  • Added linker path C:\CODEBLOCKS\Codeblocks\MinGW\lib\
  • Added the test code from the SDL2.0 project template with the #include <SDL2/SDL.h>
  • In allmost tutorials there is spoken about linker options -lSDL2 -lSDL2main to added to the lib, but there isn't any.
    So I decided using -llibSDL2 and -libSDL2main for the other linker options.
What I'm thinking wrong? What did I forgot or not know?
Greetings from Germany
Ekkehard

Offline stahta01

  • Lives here!
  • ****
  • Posts: 7668
    • My Best Post
Re: Code::Blocks don't finds my SDL2 libs
« Reply #1 on: June 04, 2024, 10:18:31 pm »
Important FAQ https://wiki.codeblocks.org/index.php?title=FAQ-Compiling_%28general%29#Q:_How_do_I_report_a_compilation_problem_on_the_forums.3F

Most GCC Mingw compilers add the lib before library names; therefore adding the lib before the library name sometimes can cause issues.

C Programmer working to learn more about C++ and Git.
On Windows 7 64 bit and Windows 10 64 bit.
--
When in doubt, read the CB WiKi FAQ. http://wiki.codeblocks.org

Offline moevenbaer

  • Single posting newcomer
  • *
  • Posts: 5
Re: Code::Blocks don't finds my SDL2 libs
« Reply #2 on: June 05, 2024, 02:35:09 pm »
Thanks. Looks not to be the reason.
To fullfill the "How to post ..." I will answer later again. I'm tried to test SDLs i686 subfolders as told in different posts and videos setting up sdl2 with codeblocks around the internet. In the build logs I found that there are x86_64 folder is userd by MinGW. So I will test the subfolders for x86_64. So long until later.
Ekkehard
P.S. But this (prepending lib to libname) happens in codeblocks/MinGW-Compilers too.
« Last Edit: June 06, 2024, 10:01:38 am by moevenbaer »

Offline moevenbaer

  • Single posting newcomer
  • *
  • Posts: 5
Re: Code::Blocks don't finds my SDL2 libs
« Reply #3 on: June 05, 2024, 06:38:39 pm »
So here is my promised reply:
I am running Code::Blocks release 20.03 - rev 11983 (2020-03-12 18:24:30) - gcc 8.1.0 Windows/unicode - 64 bit on Windows 11 Home(version 23H2 build 22631.3593). The compiler I use is build in MinGW.

When I ...
In my first problem I tried to buil this from scratch. With no success. But now I build the normal SDL2.0 project.
When it ask for the includ/lib folder with shown $(#sdl2) in the input line, I replaced it with the full paath to MinGW inside codeblocks installation folder.
The lib and the include folder fom the SDL2 devel file I copied earlier to there. The include directive for SDL.h I updated to SDL2/SDL.h.
... the following happens ...
The building tells the following build messages.
Code
||=== Build: Debug in SDL2TestA (compiler: GNU GCC Compiler) ===|
ld.exe||cannot find -lSDL2main|
ld.exe||cannot find -lSDL2.dll|
||error: ld returned 1 exit status|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
and the later following build log.
Messing around with the files I found the project xml file and in there at the end the overwritten $(#sdl2). Setting this to the ame folder as inputted, the things went well.
All though the from the scratch version I'm not able to build.

So my question changes a little bit:
How and where shell I set the macro variable for $(#sdl2) in the project (or better codeblocks?) settings?

Build log:
Code
-------------- Build: Debug in SDL2TestA (compiler: GNU GCC Compiler)---------------
g++.exe -Wall -g -IC:\CODEBLOCKS\CodeBlocks\MinGW\include -c C:\CODEBLOCKS\CB_WSp\SDL2TestA\main.cpp -o obj\Debug\main.o
g++.exe -LC:\CODEBLOCKS\CodeBlocks\MinGW\lib -o bin\Debug\SDL2TestA.exe obj\Debug\main.o   -lmingw32 -lSDL2main -lSDL2.dll -luser32 -lgdi32 -lwinmm -ldxguid
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\CODEBLOCKS\CodeBlocks\MinGW\lib/libSDL2main.a when searching for -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\CODEBLOCKS\CodeBlocks\MinGW\lib\libSDL2main.a when searching for -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/libSDL2main.a when searching for -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib\libSDL2main.a when searching for -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../libSDL2main.a when searching for -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../..\libSDL2main.a when searching for -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\CODEBLOCKS\CodeBlocks\MinGW\lib/libSDL2main.a when searching for -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/libSDL2main.a when searching for -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../libSDL2main.a when searching for -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2main
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\CODEBLOCKS\CodeBlocks\MinGW\lib/libSDL2.dll.a when searching for -lSDL2.dll
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\CODEBLOCKS\CodeBlocks\MinGW\lib\libSDL2.dll.a when searching for -lSDL2.dll
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/libSDL2.dll.a when searching for -lSDL2.dll
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib\libSDL2.dll.a when searching for -lSDL2.dll
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../libSDL2.dll.a when searching for -lSDL2.dll
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../..\libSDL2.dll.a when searching for -lSDL2.dll
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\CODEBLOCKS\CodeBlocks\MinGW\lib/libSDL2.dll.a when searching for -lSDL2.dll
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../lib/libSDL2.dll.a when searching for -lSDL2.dll
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../libSDL2.dll.a when searching for -lSDL2.dll
C:/CODEBLOCKS/CodeBlocks/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2.dll
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 1 second(s))
3 error(s), 0 warning(s) (0 minute(s), 1 second(s))

Offline stahta01

  • Lives here!
  • ****
  • Posts: 7668
    • My Best Post
Re: Code::Blocks don't finds my SDL2 libs
« Reply #4 on: June 05, 2024, 08:30:56 pm »
You need to stop doing the things you have done! MIXING 32 and 64 bit DOES NOT WORK!

You need to decide what you wish to do!

1. Do you wish to build using 64 bit or 32 bit?
2. Find an compiler or library that matches the bit size you wish to use?
3. Now find either a compiler or library to match the choice in 2?
Note: You can just choose a compiler in step 2 and the build the SDL2 library using that compiler.

Me, assuming windows 10 [or 11] 64 bit, I would install MSys2 MINGW64 GCC and SDL2 and use that for questions 1 to 3.
It [Msys2 SDL2] will take work; but, I can likely help you figure out how to get a simple example to build.

Tim S.
« Last Edit: June 05, 2024, 09:03:05 pm by stahta01 »
C Programmer working to learn more about C++ and Git.
On Windows 7 64 bit and Windows 10 64 bit.
--
When in doubt, read the CB WiKi FAQ. http://wiki.codeblocks.org

Offline moevenbaer

  • Single posting newcomer
  • *
  • Posts: 5
Re: Code::Blocks don't finds my SDL2 libs
« Reply #5 on: June 05, 2024, 11:32:08 pm »
Thankyou Tim,
my problem is/was to learn about what this 32/64 really is.
It is (using 32 and 64 in names and x86_64 and i686 and ...) very confusing.
My first goal was to get a code::blocks installation to use c++ console.
My second goal becomes a little bit more problematic. Learning what libs does what was again very confusing.
So I learned, that SDL2 and GLFW make in parts the same (windoing, keyboard, mouse), but SDL2 has additionally an API for 2d graphics.
And looking forward to 3D I learnd that there are different Frameworks (directx, vulcan, opengl, ...)
But I didn't understand how the libs work together (SDL2/GLFWand OpenGL). Now I hope to have an idea about that.
Surfing the Internet there where so many different ways, and I got no one to work. More Confusing was, that there are GlUT, GLEW, GLAD, ... and I don't know today why I do need them and which. The background of GL-function-pointer (GLAD) and so on I didn't understand.

So for now I wanted to figure out a repeatable way to get a C++ IDE with 2D and 3D capabillities. I decided to use SDL2 with Code::Blocks. And now I decide, that I don't want to look back to 32-bit. I have no reason to do so. And the compiler suite doesn't matter. So I use the MinGW only because the block::code installation brings it within.

And for now a hour ago i figured out, that the cbp file stays containing the $(#sdl2) maxcro/variable, allthough i overwritten it with the MinGW folder while sdl2 project creating. Exchage it with full folder path is working. And copying the fitting (i686 or x86_64) SDL2.dll into the bin folders of the project let the main template cpp file run too.
Thank you
Ekkehard


Offline moevenbaer

  • Single posting newcomer
  • *
  • Posts: 5
Re: Code::Blocks don't finds my SDL2 libs
« Reply #6 on: June 05, 2024, 11:49:31 pm »
For my current solution to get a running SDL2 installation with codeblocks I created a short description as pdf, that works fine to let the sdl2 template work.
One better step would be to know, how to set the $(#sdl2) before creating the sdl2 project (or while, if possible?). But I don't know yet.

So I hope this is helpfull to one other.

Ekkehard
 

Offline stahta01

  • Lives here!
  • ****
  • Posts: 7668
    • My Best Post
Re: Code::Blocks don't finds my SDL2 libs
« Reply #7 on: June 06, 2024, 06:42:54 pm »
I consider the PDF directions to be something that I would never recommend to follow.
Copying files into a good compiler installation is a way to change it into a bad compiler installation.

Edit: See link https://wiki.codeblocks.org/index.php/Global_compiler_variables

Tim S.
« Last Edit: June 06, 2024, 09:38:59 pm by stahta01 »
C Programmer working to learn more about C++ and Git.
On Windows 7 64 bit and Windows 10 64 bit.
--
When in doubt, read the CB WiKi FAQ. http://wiki.codeblocks.org

Offline sodev

  • Lives here!
  • ****
  • Posts: 500
Re: Code::Blocks don't finds my SDL2 libs
« Reply #8 on: June 10, 2024, 02:04:23 pm »
The value $(#sdl2) is a reference to a CodeBlocks Global Variable, it is intended to specify the installation location of the SDL2 library so that you don't have to mess up your compiler installation by copying the files into compiler system directories. You can define this variable with the Global Variable Editor.