* 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