Thread overview
How to a link to a C library to create static bindings?
Jan 28, 2023
thebluepandabear
Jan 28, 2023
thebluepandabear
Jan 28, 2023
evilrat
January 28, 2023

Hello,

I am wanting to create my own C bindings to CSFML, and I have been extremely struggling with this.

There is no resources or tutorials for how to do this so I am basically on my own.

First thing I looked at was dstep which helps translate C header files to D language, so I ran dstep and translated the C header files to D language. This went well. I ended up wrapping all the code in an extern(C) call.

Now, I am trying to 'link' CSFML to my bindings but have been struggling to do so.

I tried to add the following to dub.json:

"libs": ["csfml-audio", "csfml-graphics"]

But it came back with an error:

/usr/bin/ld: /home/tom/Desktop/sfmld-backend/out/production/sfmld-backend/obj/sfmld-backend.o: in function `_Dmain':
/home/tom/Desktop/sfmld-backend/source/graphics.d:(.text._Dmain[_Dmain]+0x3a): undefined reference to `sfRenderWindow_create'
/usr/bin/ld: /home/tom/Desktop/sfmld-backend/source/graphics.d:(.text._Dmain[_Dmain]+0x58): undefined reference to `sfRenderWindow_isOpen'
/usr/bin/ld: /home/tom/Desktop/sfmld-backend/source/graphics.d:(.text._Dmain[_Dmain]+0x69): undefined reference to `sfRenderWindow_pollEvent'
/usr/bin/ld: /home/tom/Desktop/sfmld-backend/source/graphics.d:(.text._Dmain[_Dmain]+0x7c): undefined reference to `sfRenderWindow_close'
/usr/bin/ld: /home/tom/Desktop/sfmld-backend/source/graphics.d:(.text._Dmain[_Dmain]+0x90): undefined reference to `sfRenderWindow_clear'
/usr/bin/ld: /home/tom/Desktop/sfmld-backend/source/graphics.d:(.text._Dmain[_Dmain]+0x99): undefined reference to `sfRenderWindow_display'
collect2: error: ld returned 1 exit status
Error: linker exited with status 1

I am really confused as to how I even am supposed to get the library name in the first place, which is another thing that is confusing me.

Any help with this would be appreciated.

January 28, 2023

When I do run with dub I just get:

Program exited with code -11

January 28, 2023

On Saturday, 28 January 2023 at 02:40:58 UTC, thebluepandabear wrote:

>

I am really confused as to how I even am supposed to get the library name in the first place, which is another thing that is confusing me.

It is up to the library author to choose a name. The extensions is .so/.dll/.dylib for shared libraries on nix/Windows/Mac and .a/.lib/??? for static libraries.

The second part, this looks like sfml graphics depends on sfml render or window or something like that, you'd better check readelf -d sfml-render.so | grep 'NEEDED' if you have dynamic libs to get a clue what it might need, or go search library that contains missing symbols by hand.