On 9/18/20 10:45 PM, tspike wrote:
If you only compile platform.d, the linker will complain about
“undefined references.” This is true when using dmd and gdc, though
platform.d compiles just fine when using ldc. But the file only fails to
compile when the “items” member of AppData is a slice; if “items” is an
int* platform.d will compile.
The linker spits the following:
platform.o:(.data._D22TypeInfo_S3app7AppData6__initZ+0x30):
undefined reference to `_D3app7AppData9__xtoHashFNbNeKxSQBeQBdZm'
platform.o:(.data._D22TypeInfo_S3app7AppData6__initZ+0x38):
undefined reference to `_D3app7AppData11__xopEqualsFKxSQBdQBcKxQjZb'
I was just wondering if anyone knows if this behavior is expected or if
this is a compiler bug. Thank you in advance for your time!
On one hand, I don't necessarily expect it. These are symbols that are
used to build an appropriate TypeInfo instance.
I wouldn't expect it, because you aren't using TypeInfo anywhere.
However, it does happen quite a bit, because the conditions under which
D generates or expects a generated TypeInfo are somewhat obscure and not
documented. It's probably why LDC works and the others don't.
I hope Andrei's recent push to demystify TypeInfo stuff makes this a lot
more tractable.
The answer is -- just build with all the files. The linker should throw
out stuff that isn't needed.
PS: I hope this is the right sub-forum for asking this sort of question!
Of course!
-Steve