Critical news

The following (GLEP 42) message has been sent to inform users about the important changes[1].

Title: GCC 5 Defaults to the New C++11 ABI
Author: Mike Frysinger <vapier@gentoo.org>
Content-Type: text/plain
Posted: 2015-10-22
Revision: 1
News-Item-Format: 1.0
Display-If-Installed: >=sys-devel/gcc-5
GCC 5 uses the new C++ ABI by default. When building new code, you might run
into link time errors that include lines similar to:
...: undefined reference to '_ZNSt6chrono12steady_clock3nowEv@GLIBCXX_3.4.17'
Or you might see linkage failures with "std::__cxx11::string" in the output.
These are signs that you need to rebuild packages using the new C++ ABI.
You can quickly do so by using revdep-rebuild (from gentoolkit).
For gentoolkit-0.3.1 or higher:
# revdep-rebuild --library 'libstdc++.so.6' -- --exclude gcc
For previous versions of gentoolkit:
# revdep-rebuild --library 'libstdc\+\+\.so\.6' -- --exclude gcc
For more details, feel free to peruse:
https://developerblog.redhat.com/2015/02/05/gcc5-and-the-c11-abi/
https://blogs.gentoo.org/blueness/2015/03/10/the-c11-abi-incompatibility-problem-in-gentoo/

For Gentoo users

C++ changes

In order to be compliant with the C++11 standard, a number of standard template library (STL) types needed to be changed (specifically std::string and std::list in libstdc++). For backwards compatibility the SONAME of libstdc++.so was not bumped, instead, inline namespaces in combination with ABI tags are used now. These necessitate a recompilation of all C++ code, otherwise code crossing file interface boundaries could fail with

undefined references to std::__cxx11

It is not a bug, if packages fail with undefined references to std::__cxx11 or [abi:cxx11] like

For Gentoo developers

Instructions by the GNU project

C changes

A significant change of GCC 5 was the move from -std=gnu89 to -std=gnu11 as default C standard. Many packages in the tree have implicitly relied on the C standard being -std=gnu89 and now fail with different types of errors: