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