DUB: How to link an external library on Windows 10?

Steven Schveighoffer schveiguy at gmail.com
Fri Aug 27 13:54:18 UTC 2021


On 8/27/21 9:21 AM, Ki Rill wrote:
> I have a Raylib project on Windows using DUB. I've added raylib-d via 
> `dub add`. But what I can't figure out is how to tell DUB to link 
> against raylib library.
> 
> I have the following project structure:
> ```
> -> source
> ---> app.d
> -> libraylib.a
> -> raylib.dll
> -> etc...
> ```
> 
> I'd like to use either .a or .dll. Do you have any ideas?

I spent a lot of time trying to figure this out (someone in discord 
really wanted to link statically for some reason). I FINALLY got a 
statically linked exe, but it's not worth the effort. I had to:

1. update my msvc build tools to match what was used for the official 
release (alternatively, you can rebuild the raylib library with your 
tools, otherwise you get cryptic errors like `fatal error C1900: Il 
mismatch between 'P1' version '20210113' and 'P2' version '20190715'`).
2. pass in cryptic linker options like `/NODEFAULTLIB:libcmt`, etc.
3. Link against extra libraries until the linker errors disappear 
(google search for missing symbols to see what libraries those symbols 
are in).

My eventual resulting dub.json looked like (you can guess where I put 
things):

```json
{
     "name": "rps-explosion",
     "dependencies": {
         "jsoniopipe": "~>0.1.3",
         "enet-d": "~>0.0.1",
         "raylib-d": "~>3.1.0"
     },
     "libs": ["enet", "raylib", "ws2_32", "winmm", "msvcrt", "user32", 
"gdi32"],
     "lflags": ["/LIBPATH:C:\\dprojects\\enet-1.3.17",
         "/LIBPATH:C:\\dprojects\\raylib-3.7.0_win64_msvc16\\lib", 
"/NODEFAULTLIB:libcmt", "/NODEFAULTLIB:libvcruntime"]
}
```

This config also included `enet-d` so some of the linker options are for 
that lib.

In the end, I got it to build and run, but I'd highly recommend just 
linking against the `raylibdll.lib` and using the dll.

-Steve


More information about the Digitalmars-d-learn mailing list