Re: Using C++11



On Mon, 29 Jun 2015 20:08:17 +0200
Murray Cumming <murrayc murrayc com> wrote:
On Mon, 2015-06-29 at 18:57 +0100, Chris Vine wrote:
I don't disagree with the rest of your post, but this is wrong.
Using the gcc-5.1 ABI does not require you to compile C++ code with
the -std=c++11 flag,

Ah, thanks.

 and there is no proposal that fedora should do so.
From that point of view the _GLIBCXX_USE_CXX11_ABI define is a
slight misnomer - the point is that the ABI is compliant with
C++11, not that it is only for C++11.
[snip]

But the applications do need to be rebuilt in Fedora? So there is an
ABI break? And that rebuild just has to be done with the newer
compiler version?

The essentials are that:

1.  _GLIBCXX_USE_CXX11_ABI controls the ABI for all versions of C++.

2.  -std=c++[...] controls the API.

All C++ code, of all C++ flavours, for any setting of -std=c++[...]
uses the same ABI if it uses the same _GLIBCXX_USE_CXX11_ABI setting.

Therefore, fedora 22, which uses gcc-5.1 with the old ABI, did not need
to recompile any of its C++ binaries, for any version of C++.

Fedora 23, which will use gcc-5.1 with the new ABI, will have to
recompile all its C++ binaries (libraries and programs)[1], for all
versions of C++ those libraries and programs may happen to use.  Thus it
will have to recompile current gtkmm-3.16 for C++-98 for the new ABI,
irrespective of what gtkmm does in the future about C++11 (if
anything).  So yes, Fedora 23 represented an ABI break - all
out-of-distribution third party C++ applications would have had to be
recompiled if they were to use any C++ library other than the standard
library.

Chris

[1]  As Kalev has mentioned, strictly speaking this does not apply to
C++ programs which only use the standard library and use no external
C++ libraries such as gtkmm or Qt, because libstdc++ comes in dual
binary format.  In practice as I understand it fedora have recompiled
everything anyway.


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