* Win32 issues with Templates and Libs *
kris
foo at bar.com
Tue Feb 20 10:18:32 PST 2007
Walter Bright wrote:
> The problem is that one of two kinds of COMDAT sections can be generated:
>
> 1) Only one COMDAT with a particular name may appear
> 2) Any number of COMDATs with the same name may appear, pick one and
> discard the others
>
> Instantiating a template produces a COMDAT section. Since multiple
> modules may instantiate a template with the same arguments, without
> knowing about each other, option (2) is used.
>
> When a module is put into a library, a dictionary is created for the
> library, essentially an associative array of object modules indexed by
> symbol names. COMDATs of option (1) get put into the dictionary, ones of
> option (2) do not. Why not? Because if there's more than one of (2),
> which object module do you pull in? No way to tell.
>
> Thus, the problem you're seeing. The solution is:
>
> 1) have another global in module test that gets pulled in, thus also
> pulling the COMDAT along with it, and resolving the symbol.
>
> 2) explicitly link in module test
>
> So, you might ask, why not just regenerate the template instantiation
> every time you use it? Because it would lead to a lot of object file bloat.
Would you perhaps explain why ELF does not have this problem? Thanks
More information about the Digitalmars-d
mailing list