[fbsd] Re: Symbol weirdness with static linking

Jeremie Le Hen jeremie at le-hen.org
Thu Apr 20 13:17:34 UTC 2006


Hi, Kostik,

On Thu, Apr 20, 2006 at 03:48:29PM +0300, Kostik Belousov wrote:
> It seems that you rebuilt world with CFLAGS -fstack-protector,
> since your libc has references to the symbols like __stack_smash_handler.
> As result, when linking with sequence -lgcc -lssp -lc -lgcc -lssp,
> and no references from the main object,
> references from libc causes objects from _second_ instance of -lssp to
> be pulled into the link. Since libraries are scanned sequentially,
> this object from libssp has no way to get required dependencies
> from libc.
> 
> What makes syslog(3) special is that corresponding object from libc,
> syslog.o, requires __stack_smash_handler, while objects for mentioned
> syscalls do not.
> 
> Probably, another -lc after -lssp will change the situation. But
> I'm not sure would it be enough or not.

You got the point.  If I add another -lc after the second -lssp,
this solves the problem :

/usr/bin/ld -V -Bstatic -o echo /usr/obj/usr/src/tmp/usr/lib/crt1.o /usr/obj/usr/src/tmp//usr/lib/crti.o /usr/obj/usr/src/tmp/usr/lib/crtbegin.o -L/usr/obj/usr/src/tmp/usr/lib echo.o -lgcc -lssp -lc /usr/obj/usr/src/tmp/usr/lib/crtend.o /usr/obj/usr/src/tmp/usr/lib/crtn.o

Another way to solve this is to group libraries using "-(" and "-)" ld(1)
options :

/usr/bin/ld -V -Bstatic -o echo /usr/obj/usr/src/tmp/usr/lib/crt1.o /usr/obj/usr/src/tmp/usr/lib/crti.o /usr/obj/usr/src/tmp/usr/lib/crtbegin.o -L/usr/obj/usr/src/tmp/usr/lib echo.o -lgcc -lssp -\( -lc -lgcc -lssp -\) /usr/obj/usr/src/tmp/usr/lib/crtend.o /usr/obj/usr/src/tmp/usr/lib/crtn.o

Thank you for your answer.
Best regards,
-- 
Jeremie Le Hen
< jeremie at le-hen dot org >< ttz at chchile dot org >


More information about the freebsd-hackers mailing list