On Tuesday, 26 August 2014 at 15:28:32 UTC, nezih wrote:
I use optlink and I use the latest dmd: DMD32 D Compiler v2.066.0 And yes I see underscores in front of the exported symbol names. What's the workaround? And I just verified that the 64-bit version doesn't have those leading underscores.

Ah, runtime linking code rarely accounts for leading underscores (the so-called Windows "system" convention), so that is probably your problem.

First, make sure the symbols are marked extern(C) and not extern(Windows) or extern(System).

The workaround I usually use is simply prepending a dummy symbol to each exported one. If the exported C symbols are *not* mixed in, just manually place a dummy symbol at the beginning of the module:

---
export extern(C) void __optlinkdummy() {}
---

If they are mixed in through a mixin template or a string mixin, use pragma(mangle, ...) or string concatenation, respectively, to place a uniquely named dummy export before each proper export. This robustly ensures that your proper export is never the first exported symbol.

This is supposed to be fixed in the latest OPTLINK source code, so it's tragic that DMD 2.066 ships with an outdated version that still has this terrible bug :(

Reply via email to