This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: ld -shared -Bsymbolic and C++ shared library
- From: "H. J. Lu" <hjl at lucon dot org>
- To: Geoffrey Keating <geoffk at apple dot com>
- Cc: binutils at sources dot redhat dot com, gcc at gcc dot gnu dot org
- Date: Thu, 27 Jul 2006 18:21:24 -0700
- Subject: Re: ld -shared -Bsymbolic and C++ shared library
- References: <20060716172604.GB29871@lucon.org> <m2hd12k72q.fsf@greed.local>
On Thu, Jul 27, 2006 at 03:37:33PM -0700, Geoffrey Keating wrote:
> "H. J. Lu" <hjl@lucon.org> writes:
>
> > ld -shared -Bsymbolic will reduce number of dynamic relocations in
> > a shared library. Unfortunately, it won't work correctly with C++
> > exception and maybe other language features.
> >
> > However, I think it is possible to make -shared -Bsymbolic to work
> > for C++ by providing a way to specify a list of symbols which must
> > be dynamic. We then can do
> >
> > # g++ -Wl,-Bsymbolic -shared -xxx "list of dynamic symbols" -o libfoo.so ...
> >
> > and libfoo.so written in C++ will work correctly with much fewer dynamic
> > relocations.
>
> You may find this would be easier to use if you just had a flag which
> made -Bsymbolic apply only to non-weak symbols.
It doesn't work since
1. There are weak function symbols, which we do want to bind locally.
2. Weak symbols aren't required for comdat group.
BTW, -Wl,-Bsymbolic can't be used since it will add DF_SYMBOLIC to
shared library, which will cause dynamic linker to resolve symbols
locally.
H.J.