(original) (raw)

How can a "weak" definition be a "strong" one!? ;)

I think the reason for "weak" was to not duplicate it. A static would be duplicated in every translation unit that includes the header right? I don't know what it means in terms of extra number of relocation, etc.
Also the attribute used will prevent the linker from dead-stripping the symbol in case of static linking and/or when using LTO.

--
Mehdi


2017-11-28 14:35 GMT-08:00 David Blaikie <dblaikie@gmail.com>:
The abi-breaking.h seems to be incompatible with modules, owing to it having strong definitions in the header.

I'm wondering if I can make it compatible by changing the:

\_\_attribute\_\_((weak, visibility("hidden"))) variables to \_\_attribute\_\_((used)) static variables instead? It still seems to produce the desired link errors in my basic tests. Does that seem plausible to you?

(modules have a special case for static variables in headers to support things like the iostreams initializer)

Not sure why the modules buildbots don't see this but google's internal build system building with modules does...

- Dave