On 12/09/2026 2:19 AM, Rambutan wrote:
On Tuesday, 8 September 2026 at 21:07:20 UTC, Rambutan wrote:
I started a discussion here, following your suggestion. I'm beginning to understand what the issues are.

https://github.com/dlang/dmd/discussions/23814

After some thought I have formed the following working hypotheses about successful linkage of D interface files.

1. A D interface file connected to a D application or project.

The result of compiling a .di file is minimal so as not to duplicate parts of the D application they correspond to. Nevertheless some necessary implicit type-related symbols may well be created by this compilation, so in general such a file should be compiled and linked in.

So when connected to a D project, compile and link in its .di file, don't just import it.


2. A D interface file generated (or written) to replace C header files connected to a C application or project.

There may be missing symbols in using such a file, and because of 1. above, these will NOT be generated by compiling the .di file and linking it in. Instead those symbols need to be generated by renaming the file to .d so it is treated as regular D source, as the C source it refers to, not being D, will not produce those type-related symbols, so the interface file itself has to do that. The trickery used to minimize the implied existence of such type related symbols does not always succeed, e.g. in the case of doubles in structs.

In summary, always compile and link in a D interface file. If it is connected to a C project as a D replacement for C header files, rename the .di file to a .d file and compile and link that.

---curious if there's any disagreement with this, eager to hear feedback.

R.

The file extension is irrelevant. The compiler treats them the same.

The difference is -I/-extI vs being compiled in.

Reply via email to