Actually, you claim that if some static library defines some global variable, then it should NOT be linked with more then one shared library. That is, if you have the dependencies tree like in my example then you have a problem. Think about such static library is third party library where I can't change the code. Regarding the ODR. You are absolutly right. But what about a MULTIPLE variable initialization. Is it correct behaviour according to standard? Alexey ________________________________ From: Andrew Haley <aph@xxxxxxxxxx> To: noloader@xxxxxxxxx Cc: Alexey Skidanov <Alexey.Skidanov@xxxxxxxxxxxx>; gcc-help@xxxxxxxxxxx; skidanovalexey@xxxxxxxxx Sent: Thu, October 21, 2010 7:37:25 PM Subject: Re: Global variable in static library - double free or corruption error On 10/21/2010 05:23 PM, Jeffrey Walton wrote: >> that there can only ever be one definition of a symbol in a program, and >> UNIX has always merged multiple definitions to achieve this > Does the rule include that gloabl object destructors are to run on > every unload, or the last/final unload or last call to dlclose (when > the shared object gets unmapped)? I suspect that Bad Things would happen. :-) As far as I know, they are run, and if you have two definitions of some object with a destructor, then you violate the ODR rule, and it's all your fault! > Many folks don't expect their > objects will be pulled out from under them until the last unload. It > seems like a reasonable expectation to me. Sure, but you break the rules, you get to keep all the pieces. Andrew.