Re: C++ binary compatibility between different versions of gcc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 5 March 2013 10:39,  <Heiko.Papenfuss@xxxxxxxxxxx> wrote:
> Hi Jonathan,
>
> thanks for the definitive answers.
>
>>
>> Yes.  (Technically if the object files were compiled with
>> ABI-compatible GCC versions then what matters at link-time is not
>> which version of GCC you use to do the link, it's which version of
>> libstdc++.so you link against, but that is usually determined by the
>> version of GCC used, unless you specifically force GCC to link to a
>> different libstdc++.so)
>
> Does this mean that it would be possible to link with any GCC that
> supports -fabi-version=2 against any libstdc++.so.6.x.y?

I'm not sure I understand what you're asking.

GCC doesn't do linking, it just forwards arguments to the linker. The
-fabi-version option is not used at link-time, that only affects
code-generation at compile-time.  So in theory you can use *any* gcc
driver to link compatible objects together if you explicitly say which
libstdc++.so to use, because the list of objects and libraries will be
forwarded to the linker, but just using the g++ driver that matches
that libstdc++.so is by far the simplest approach.

Also, you can't link against *any* libstdc++.so.6.x.y, you must link
against a version that is no older than required by any of your
objects.  If your program consists of three objects and you compile
foo.o and bar.o with GCC 4.1.2 and baz.o with GCC 4.6.3 then you must
link your program to libstdc++.6.0.16 or later, because baz.o will
depend on the GLIBCXX_3.4.16 version that is only found in
libstdc++.so.6.0.16 and later.

If that doesn't answer your question please be more specific,
providing a concrete example with commands showing what you're asking
about.


> Another question comes to my mind here: Let's assume I have two object files
> or libraries that have been compiled separately and were compiled with
> different versions of GCC thus needing different versions of libstdc++.so
> at run-time. Do I read [2], "Multiple ABI Testing", correctly that I should
> be able to compile and run a program which uses both libraries provided that
> the most current libstdc++.so that any library depends on is present at
> run-time?

The "Multiple ABI Testing" docs refer to using incompatible libraries,
e.g. libstdc++.so.5 and libstdc++.so.6, in the same process. It's hard
to get right, can only be done if no library types (or type_info or
exceptions or polymorphic types) cross library boundaries, and I'm not
sure those docs are 100% accurate.  If you just want to link objects
compiled with GCC 4.X with objects compiled with GCC 4.Y then that
section of the docs is not relevant.


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux