# gcc 5.3 - undefined reference - abi:cxx11

## musv

Guten Abend, 

ich hab vor kurzem mal wieder ein Update gestartet. Dabei hab ich auch den gcc von 4.9 auf 5.3 aktualisiert. Entsprechend dem Wiki hab ich libtool neu gebaut und ein revdev-rebuild auf die libstdc++.so.6 durchgeführt. 

Jetzt gibt's so einige Pakete, die dann mit ziemlich ähnlichen Fehlermeldungen abbrechen. Das sind u.a. 

Libreoffice

Scribus

Aegisub

Mkvtoolnix

Die Fehlermeldungen sehen dann so aus (hier Libreoffice):

```
cppunittester.cxx:(.text+0x65c): undefined reference to `CppUnit::PlugInParamete

rs::PlugInParameters(std::__cxx11::basic_string<char, std::char_traits<char>, st

d::allocator<char> > const&)'

cppunittester.cxx:(.text+0x66b): undefined reference to `CppUnit::PlugInManager:

:load(std::__cxx11::basic_string<char, std::char_traits<char>,

 std::allocator<char> > const&, CppUnit::PlugInParameters const&)'

cppunittester.cxx:(.text+0x95a): undefined reference to `CppUnit::TestFactoryReg

istry::getRegistry(std::__cxx11::basic_string<char, std::char_traits<char>, std:

:allocator<char> > const&)'
```

Auffällig dabei ist immer std::__cxx11. Wie krieg ich das zum Laufen?

----------

## Jean-Paul

Hier https://forums.gentoo.org/viewtopic-p-7774236.html?sid=efe9c83c7fb7b1a17eed4bab70a307e2

scheint es eine Lösung zu geben.

----------

## Christian99

konkret in deinem Fall müsste das neubauen von cppunit helfen.

zu sehen an  *Quote:*   

> undefined reference to `CppUnit::

 

das CppUnit am Anfang ist der namespace in dem die symbole sind. der ist oft gleich oder ähnlich dem paket namen (leider nicht immer).

wenn du noch mehr solche fehler findest, dann kannst du so probieren das paket das neu gebaut werden muss zu finden.

Falls nicht, frag nochmal nach.

Wobei aber eigentlich das revdep-rebuild das schon behoben haben sollte, aber naja.

PS: bei größeren paketen hab ich die Erfahrung gemacht, dass du meistens das Paet, welches ursprünglich den Fehler hatte, mit FEATURES=keepwork weiterbauen kannst, damit du nicht nochmal alles von vorne machen musst.

----------

## franzf

 *musv wrote:*   

> Entsprechend dem Wiki hab ich libtool neu gebaut und ein revdev-rebuild auf die libstdc++.so.6 durchgeführt. 

 

Scheinbar ist revdep-rebuild in python neugeschrieben worden. Das alte revdep-rebuild gibts noch als revdep-rebuild.sh. Du kannst ja versuchen, ob das noch mehr findet.

----------

## Klaus Meier

Für das Update von gcc:4 auf gcc:5 gibt es doch eine News, welche besagt:

```
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/
```

Des weiteren kann ich zu der Aussage von franzf sagen, ich hatte bislang noch nicht das Problem, dass das aktuelle revdep-rebuild irgendwelche Pakete nicht gefunden hat (das kommt ja sowieso nur noch ganz selten vor, deshalb kann ich dazu keine Aussage treffen) sondern dass es permanent Pakete neu bauen wollte, wo gar kein Problem vorlag.

Von daher ist revdep-rebuild.sh immer noch bevorzugt einzusetzen. Und probiere es dann mal mit dem oben angegebenen.

Edit: Ich habe schon den gcc:5 genutzt, bevor ich diesen Hinweis mit dem revdep-rebuild irgendwas bekommen habe. Ich habe es damals mit 2x emerge -e world gelöst...

----------

## musv

franzf: revdep-rebuild hatte ich schon probiert. Der findet nichts - weder in der Python- noch Shellscriptversion.

Christian99: Danke, das war der entscheidende Hinweis. Man muss dann halt bei den Klassen googlen, zu welchem Paket die gehören. Ist etwas mühselige Kleinarbeit, klappt aber.

Klaus: Hier gibt's den Patch für Revdep-rebuild.sh, um das Script für "broken ABI" fit zu machen.

Update:

Leider macht der Patch zumindest bei mir nicht das, was er soll. Ich hatte danach trotzdem noch so einige Pakete mit der ABI-Inkonsistenz. Offensichtlich muss man tatsächlich erst bis zum Fehlerfall warten.

----------

