On Tue, Sep 05, 2006 at 04:50:24PM -0500, Manoj Srivastava wrote: > > Starting with version 2.5.31-18 of flex we have started > providing a static library compiled with position independent code, > namely, libfl_pic.a, in addition to the normal libfl.a library. This > is my mail, in accordance to §10.2 of the Debian policy.
> The problem is with packages that contain shared libraries > with a flex scanner compiled in. Since flex generates code > that is not self contained, and the missing symbols live in > libfl.a. However, since linking a shared library with a object > containing non position independent code stopped working with gcc 4.1 > (apparently, it was sheer luck that it worked at all). So now we also > provide libfla_pic.a for shared library packages to link with. > I was initially going to just provide libfl.a with position > independent code, which would have prevented the FTBS breakage for > scanner containing shared libraries, at the expense of a register > lost for binaries that were otherwise statically linked, and perhaps > slower execution speeds. When I broached this on IRC, people > commented that I could provide libfl_pic.a in addition to libfl.a , > but compile them both with -fPIC, and transition back at some later > point to having a non position independent static libfl.a > Then I realized I was falling into the trap of preferring > convenience to correctness; the right thing to identify and fix > packages building shared objects linked to non relocatable code. So, > now these packages can link to libfl_pic.a, and binaries can > continue to link with libfl.a. > An alternative would have been to provide a full fledged > shared library, The other alternative discussed on IRC was to make /usr/lib/libfl.so a linker script, à la libc.so. I think the below should be sufficient, giving you PIC code when shared linking is requested by the linker and non-PIC code when static linking is requested: /* GNU ld script When shared linking is requested, map the request to the PIC static library, which is the closest we come to a shared library here. */ INPUT( /usr/lib/libfl_pic.a ) Untested, though; it may actually be better to use GROUP() instead of INPUT(), I'm not sure if ld will treat the two commands the same for reduction of unused symbols. Cheers, -- Steve Langasek Give me a lever long enough and a Free OS Debian Developer to set it on, and I can move the world. [EMAIL PROTECTED] http://www.debian.org/ -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]