Question about linker errors when using slices
Steven Schveighoffer
schveiguy at gmail.com
Sat Sep 19 18:53:24 UTC 2020
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
More information about the Digitalmars-d-learn
mailing list