-fPIC and static libstdc++
Ian Lance Taylor
iant@google.com
Mon Oct 21 02:34:00 GMT 2013
On Sat, Oct 19, 2013 at 4:22 AM, Philip Bennefall <philip@blastbay.com> wrote:
>
> My last response mistakenly went to you alone, rather than to the list. This
> should be seen by everyone.
>
> As per your suggestion, I inspected the output of readelf -r with libgcc and
> libstdc++. I get an enormous amount of output, but among all the entries I
> see things like the following for libgcc:
>
> 000015a2 00000b04 R_386_PLT32 00000000 __addtf3
> 00000113 00001304 R_386_PLT32 00000000 __fabstf2
> 0000001d 00000c04 R_386_PLT32 00000000 __fixunssfdi
> ... And lots of others.
>
> For libstdc++, I see things like:
> 0000003e 00001904 R_386_PLT32 00000000 _ZNSi6sentryC1ERSib
> 00000017 00001304 R_386_PLT32 00000000 _Znwj
> 0000001e 00001604 R_386_PLT32 00000000 _ZN10__cxxabiv116__enu
> 0000011e 00005904 R_386_PLT32 00000000 _Unwind_Resume
>
> I just chose some of these entirely at random, but I am having a hard time
> interpreting this output. Does it seem as though these libraries have
> relocation information in them? I assume yes?
Yes, they have relocation information. More importantly, the presence
of the R_386_PLT32 relocation means that the code was compiled with
-fPIC.
> Once I have compiled my shared library, is there any trivial way of
> verifying whether or not everything was compiled correctly for maximum
> independence so to speak?
You can use readelf -rd on the shared library to see what other shared
libraries and symbols your library depends on.
Ian
More information about the Gcc-help
mailing list