On Thursday, 21 January 2016 at 16:14:40 UTC, jmh530 wrote:
I'm trying to understand calling C libraries from D on Windows with DMD. I made a simple example and compiled it with a static library fine (so I've converted the .h file correctly). Then, I compiled with gcc to a shared library (because I cannot for the life of me figure out how to do this with DMC). I then used implib to generate a .lib file (the fact that this is necessary is not described nearly well enough in the documentation).

The next step is getting this to compile with dmd. I'm getting an error that the function isn't getting called, which is suggesting that I'm not linking the .lib file with DMD properly.

The dmd page
https://dlang.org/dmd-windows.html
explains that -L is used to pass stuff to the linker. It seems to indicate that this should be the folder that the library is in. The dll and lib files are in the same folder as the .d file I'm trying to compile. So presumably, this should be -L. or -L\. or like -LC:\folder\. But nothing like that works. There's a link on the dmd page to optlink, which doesn't really help me figure this out either. There's also some stuff about set LIB in the sci.ini. Not sure I'm supposed to mess with that.

The LearningD book has some examples as well. I don't have it in front of me right now, but I think I tried what they recommend also. Nevertheless, I feel like the documentation should be clear enough so that this isn't so frustrating.

You need to port the header file to d. i believe there's the htod utility, however I haven't used that yet. Then, basically all you have to do is to tell the linker to link against your C .lib. Remember that -LC:\folder (for dmd) passes "C:\folder" on to the linker. Assuming the library folder flag for your linker is -L, you'd want to use -L-LC:\folder.

Reply via email to