On Sunday, 15 August 2021 at 10:19:33 UTC, Mike Parker wrote:
On Sunday, 15 August 2021 at 10:12:17 UTC, Timofeyka wrote:

Thank you for your reply!
I wanted to link to my project another project without source code.

Yeah, that's not possible. You either need the source or a set of D interface files that declares all the symbols you need.

Meaning, it is possible. On Windows where I assume these .lib files are:

```
PS C:\Users\jfond> cat math.d
extern(C) int twice(int n) { return n * 2; }

PS C:\Users\jfond> cat mathuser.d
extern (C) int twice(int n);

void main() {
    import std.stdio : writeln;

    writeln(twice(21));
}

PS C:\Users\jfond> ldc2 -lib math.d
PS C:\Users\jfond> ldc2 mathuser.d math.lib
PS C:\Users\jfond> ./mathuser
42
```

math.lib is written in D but it could've been written just as well in C or C++ or anything, as long as it's targeting the C ABI in whatever language.

When mathuser.d is compiled, D does not need the source for math.lib. That one extern(C) function without a body is sufficient to, again targeting the C ABI, say "I am expecting to be linked with a function like this", and math.lib supplies that function at link time.

D is identical to pretty much every other native-compiled language in this respect.

The question you probably want to be asking is, "given a specific library from this vendor, what's the most *convenient* way to link D against it", or "how should I tell dub to link this D application with a .lib file in a parent directory", etc.

Reply via email to