__register_frame_info

Wenn Sie auf folgenden Fehler stoßen, zum Beispiel, wenn Sie Gnome auf einem Red Hat-artigen System verwenden, möchten Sie folgendes lesen.

   surusoitto:/tmp/bin# ./irc
   ./irc: error in loading shared libraries
   : undefined symbol: __register_frame_info
Offenbar können Sie das Programm nicht ausführen.

Dieses ist das Resultat einer Mischung aus gcc und egcs, die Software compiliert haben. Offenbar wurde die libc mit dem gcc compiliert, was vernünftig ist. Allerdings wurde das Program, das Sie zu benutzen versuchen, mit em egcs auf einem System compiliert, dessen Bibliotheken ebenfalls mit dem egcs übersetzt wurden.

Wo passiert dieses normalerweise?

Detailierte Beschreibung

Egcs enthält in der internen libgcc.a-Bibliothek Funktionen zur Fehlerbehandlung für C++. Sie werden in jedes Programm und jede dynamische Bibliothek aufgenommen, die vom egcs compiliert wird, unabhängig davon, ob sie gebraucht werden oder nicht.

Gcc macht das nicht.

Wenn Sie Ihre Systembibliothek libc oder libstdc++ (die sogar vom egcs stammt) mit egcs compilieren, werden sie diese Symbole enthalten und exportieren. Jedes anschließend compilierte und dagegen gelinkte Programm wird daher erwarten, daß diese Symbole verfügbar sind. Als Resultat davon können Sie diese Programme auf keinem System verwenden, auf dem die Systembibliotheken mit dem gcc compiliert wurden.

Lesen Sie dazu auch, was die glibc FAQ und Debian dazu sagen.

Eine Lösung

Die beste Lösung besteht darin, die zu verwendenden Programme auf dem eigenen System zu compilieren - oder anderseitig sicherzustellen, daß auf beiden, dem Quell- und dem Zielsystem, die gleichen Bibliotheken verwendet werden.

Eine Behelfslösung besteht darin, folgende Bibliothek libfixframeinfo.c vor den regulären zu laden. Compilieren Sie sie mit dem Befehl:

   gcc -shared -o libfixframeinfo.so libfixframeinfo.c
Anschließend laden Sie sie vor die üblichen mit:

   export LD_PRELOAD=/foo/bar/libfixframeinfo.so

Schlußbemerkung

Die SuSE GmbH hat geschafft, was alle Linuxer fürchten wie der Teufel das Weihwasser, binäre Incompatibilität bei gleicher libc. Um das ganze zu toppen, behauptet SuSE, es sei ein bekannter Bug in Debian. Offenber ist es gleichzeitig ein Bug in DLD 6.1, RedHat 5.2 etc.

Betroffene Programme von SuSE 6.0 oder 6.1 werden übrigens normal auf Systemen mit der unstabilen glibc 2.1 laufen, da die Bibliothek diese Symbole beinhaltet.

Siehe auch bei CHIP.


© Joey, 21 May '99