RFC: Don't output symbol version requirement for non-DT_NEEDED libs

Joseph Myers joseph@codesourcery.com
Fri Nov 28 00:06:00 GMT 2014


On Thu, 27 Nov 2014, Carlos O'Donell wrote:

> On 11/27/2014 03:16 AM, Alan Modra wrote:
> > So, absent someone implementing a glibc fix, how about we just drop
> > the symbol versioning for weak symbols, when their defining library
> > won't be in DT_NEEDED?  Note that if "f" above was a strong symbol,
> > ld will still complain with "./libb.so: error adding symbols: DSO
> > missing from command line".
> 
> This seems like the wrong thing to do, particularly since it violates
> the principle of least surprise. I would expect the versioned symbol
> to stay versioned.
> 
> What's wrong with fixing this in glibc?

Actually, I think it's a linker bug not a glibc bug.  If you don't link 
with a library providing a symbol you use, I don't think any information 
at all about how it might be resolved with some library you didn't link 
against should be embedded in the binary: not a DT_NEEDED entry, and not a 
version requirement.  I don't think you can presume at static link time, 
with a weak undefined symbol like that, "this symbol isn't needed, but if 
defined at runtime it must have this version" (as opposed to "this symbol 
isn't needed, and might have any version at runtime", which is the safe 
assumption).

-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Binutils mailing list