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.