Sven Rautenberg: Gentoo Linux: Alten gcc gelöscht - jetzt fehlt libstdc++.so.5

Moin!

Ich habe ein "kleines Problemchen" mit meinem Gentoo.

Im Rahmen eines Updates wurde dort GCC 3.4.6 installiert. Parallel war aber auch noch ein GCC 3.3.x vorhanden.

Meiner initialen Eingebung folgend hab ich diese alte Version dann entfernt, was ich sofort bereute, da dadurch auch die Bibliothen libstdc++.so.5 entfernt wurde, was wiederum das Funktionieren von emerge, python und diversen anderen Tools (von denen ich wohl meist noch nichts weiß) bedeutet. Das ist also sozusagen die komplette Sackgasse, weil das Rückgängigmachen der Entfernung mangels emerge nicht klappt.

Welche Optionen habe ich nun? Wo kriege ich eine passende libstdc++.so.5 her, oder wie kann ich den Programmen kenntlich machen, dass beispielsweise die Version 6.0.3 dieser Lib doch auch ganz nett wäre (die existiert nämlich schon bei GCC 3.4.6).

- Sven Rautenberg

--
My sssignature, my preciousssss!
  1. echo $begrüßung;

    Im Rahmen eines Updates wurde dort GCC 3.4.6 installiert. Parallel war aber auch noch ein GCC 3.3.x vorhanden.

    Kennst du den Gentoo Linux GCC Upgrade Guide? Gentoo hat für manche Pakete extra Upgrade-Dokumentationen. Man sollte sie nicht einfach so emergen, auch wenn sie so scheinbar harmlos als freigegeben gekennzeichnet werden.

    Als Gentoo-Benutzer betreibt man ein "changing system" *), der wöchentliche Newsletters ist daher in meinen Augen Pflichtlektüre, da werden solche gravierende Umstellungen angekündigt und auch auf die Upgrade-Dokumentation verwiesen.

    Aber nun ist das Kind ja bereits im Brunnen ...

    Wo kriege ich eine passende libstdc++.so.5 her,

    Vielleicht von einer Installations/Live-CD.

    oder wie kann ich den Programmen kenntlich machen, dass beispielsweise die Version 6.0.3 dieser Lib doch auch ganz nett wäre (die existiert nämlich schon bei GCC 3.4.6).

    mit einem SymLink?

    echo "$verabschiedung $name";

    *) "Never change a running system" - "Never run a changing system"

    1. Moin!

      Im Rahmen eines Updates wurde dort GCC 3.4.6 installiert. Parallel war aber auch noch ein GCC 3.3.x vorhanden.

      Kennst du den Gentoo Linux GCC Upgrade Guide?

      Das war, nachdem emerge dann nicht mehr ging, auch mein Gedanke... "Hm, vielleicht ist der GCC so wichtig gewesen, dass man den nicht einfach austauscht." Nur war es da schon zu spät.

      oder wie kann ich den Programmen kenntlich machen, dass beispielsweise die Version 6.0.3 dieser Lib doch auch ganz nett wäre (die existiert nämlich schon bei GCC 3.4.6).

      mit einem SymLink?

      Nun ja, dazu müßte ich wissen, wo die Programme die Lib pfadmäßig vermuten. Wie kriege ich das raus?

      - Sven Rautenberg

      --
      My sssignature, my preciousssss!
      1. echo $begrüßung;

        oder wie kann ich den Programmen kenntlich machen, dass beispielsweise die Version 6.0.3 dieser Lib doch auch ganz nett wäre (die existiert nämlich schon bei GCC 3.4.6).

        mit einem SymLink?

        Nun ja, dazu müßte ich wissen, wo die Programme die Lib pfadmäßig vermuten. Wie kriege ich das raus?

        Mit einer Installations/Live-CD. Ansonsten: Wenn ich recht informiert bin, klappern sie die Pfadangaben in /etc/ld.so.conf ab.

        echo "$verabschiedung $name";

      2. Hallo,

        mit einem SymLink?

        Das geht als unzuverlässige Übergangslösung. Dann meckern zwar viele Programme über fehlende Symbole, aber python (damit emerge), make, der Compiler und Linker sollten rudimentär funktionieren, sodass ein Emergen der alten libstdc++ möglich sein sollte. So habe ich das Problem zumindest gelöst.

        Danach lässt man revdep-rebuild --library libstdc++.so.5 aus app-portage/gentoolkit laufen, danach kann man den alten GCC gefahrlos löschen (steht auch im Upgrading-Guide).

        Nun ja, dazu müßte ich wissen, wo die Programme die Lib pfadmäßig vermuten. Wie kriege ich das raus?

        Alt (Version 5, GCC 3.3.6):
        /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.6/libstdc++.so.5

        Neu (Version 6, GCC 3.4.6):
        /usr/lib/gcc/i686-pc-linux-gnu/3.4.6/libstdc++.so.6

        Mathias

        1. mit einem SymLink?

          Das geht als unzuverlässige Übergangslösung. Dann meckern zwar viele Programme über fehlende Symbole, aber python (damit emerge), make, der Compiler und Linker sollten rudimentär funktionieren, sodass ein Emergen der alten libstdc++ möglich sein sollte.

          Da reicht natürlich das besagte Paket libstdc++-v3, es muss nicht der gesamte GCC sein.

  2. hallo Sven,

    Im Rahmen eines Updates wurde dort GCC 3.4.6 installiert. Parallel war aber auch noch ein GCC 3.3.x vorhanden.

    Wie hast du denn dein Update gemacht?

    Meiner initialen Eingebung folgend hab ich diese alte Version dann entfernt

    Wie hast du das gemacht? Einfach nur aus dem Verzeichnis löschen ist keine gute Idee. Normalerweise schaust du nach einem "emerge --sync" nach, welche neuen ebuilds es gibt. gibt es eine neuere Version irgendeiner Bibliothek oder sonst irgendwas wie z.B. den GCC, kannst du ein "emerge unmerge paketname" laufen lassen, um die installierte Version zu entfernen. Das ist beim GCC etwas komplex. Es reicht in der Regel jedoch, ein enfaches "emerge paketname" zu fahren. Da wird nach eventuell bereits vorhandenen älteren Versionen gesucht, und die werden nach einer fünf Sekunden dauernden Nachfrage gelöscht und durch die neue Version ersetzt.

    Anders sieht es aus, wenn du dir irgendwelche .tar.gz-Souzrcen holst, um von irgendeiner Software mehrere Versionen zu haben. Das geht, aber da mußt du dann beim Kompilieren darauf achten, daß du "eigene" Pfade beispielsweise für libdir o.ä. (kannst du meinst als "configure"-Option angeben) vorgibst. So ist es beispielsweise möglich, mehrere unterschiedliche GCC-Versionen nebeneinander auf einem Rechner arbitsfähig zu halten. Allerdings ist der GCC eben ziemlich umfangreich.
    Den Rest erledigst du mit Verlinkungen.

    Welche Optionen habe ich nun? Wo kriege ich eine passende libstdc++.so.5 her

    Von http://gcc.gnu.org. Aber vermutlich brauchst du die nicht. Du kannst anstelle der tatsächlichen Dateien einen link auf die installierten Bibliotheken setzen, und dabei auch ältere Software austricksen. Dein Link kann zum Beispiel "libstdc++.so.5" heißen, aber tatsächlich auf "libstdc++.so.6" zeigen.

    oder wie kann ich den Programmen kenntlich machen, dass beispielsweise die Version 6.0.3 dieser Lib doch auch ganz nett wäre (die existiert nämlich schon bei GCC 3.4.6).

    Du informierst dich erstmal, wo die libstdc++.so.x überhaupt alle vorkommen sollte(n). Das geht so:
    gentoo ~ # cd /usr/lib
    gentoo lib # ls -lR |grep libstdc++
    Und das Ausgabeergebnis sieht bei mir so aus:
    drwxr-xr-x    2 root root     120 May  8 21:15 libstdc++-v3
    -rw-r--r--  1 root root 1702024 Feb 14 06:20 libstdc++.a
    -rwxr-xr-x  1 root root     957 Feb 14 06:20 libstdc++.la
    lrwxrwxrwx  1 root root      18 May  8 21:15 libstdc++.so -> libstdc++.so.6.0.3
    lrwxrwxrwx  1 root root      18 May  8 21:15 libstdc++.so.6 -> libstdc++.so.6.0.3
    -rwxr-xr-x  1 root root  830500 Feb 14 06:20 libstdc++.so.6.0.3
    -rw-r--r--  1 root root 1798230 Feb 14 06:20 libstdc++_pic.a
    ./libstdc++-v3:
    lrwxrwxrwx  1 root root     18 May  8 21:15 libstdc++.so.5 -> libstdc++.so.5.0.6
    -rwxr-xr-x  1 root root 735448 Feb 14 06:32 libstdc++.so.5.0.6

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Moin!

      Im Rahmen eines Updates wurde dort GCC 3.4.6 installiert. Parallel war aber auch noch ein GCC 3.3.x vorhanden.

      Wie hast du denn dein Update gemacht?

      Wie üblich mit emerge.

      Meiner initialen Eingebung folgend hab ich diese alte Version dann entfernt

      Wie hast du das gemacht?

      emerge --unmerge

      Von http://gcc.gnu.org. Aber vermutlich brauchst du die nicht. Du kannst anstelle der tatsächlichen Dateien einen link auf die installierten Bibliotheken setzen, und dabei auch ältere Software austricksen. Dein Link kann zum Beispiel "libstdc++.so.5" heißen, aber tatsächlich auf "libstdc++.so.6" zeigen.

      Der GCC-Upgrade-Guide verweist explizit auf die besondere Vorgehensweise bei der libstdc++ von Version 5 auf 6. Um kompatibel zu alten Paketen zu bleiben, wird dort extra ein Kompatibilitätspaket emerget.

      Und das hast du auch installiert:

      ./libstdc++-v3:
      lrwxrwxrwx  1 root root     18 May  8 21:15 libstdc++.so.5 -> libstdc++.so.5.0.6
      -rwxr-xr-x  1 root root 735448 Feb 14 06:32 libstdc++.so.5.0.6

      Vielleicht kann mir ja einfach jemand eine libstdc++.so.5 schicken, die auf Pentium MMX läuft. :)

      - Sven Rautenberg

      --
      My sssignature, my preciousssss!
      1. hallo Sven,

        Vielleicht kann mir ja einfach jemand eine libstdc++.so.5 schicken, die auf Pentium MMX läuft. :)

        Eine libstdc++.so.5.0.7 hätte ich anzubieten, ist vom Oktober 2005 und läuft auf einem PentiumII.

        Grüße aus Berlin

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
      2. Hallo Sven,

        Vielleicht kann mir ja einfach jemand eine libstdc++.so.5 schicken, die auf Pentium MMX läuft. :)

        ----------------------- schnipp -------------------------------------
        /main/g/gcc-3.3/libstdc++5_3.3.5-13_i386.deb
        --18:56:24--  http://ftp.de.debian.org/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.5-13_i386.deb
                   => `libstdc++5_3.3.5-13_i386.deb'
        Resolving ftp.de.debian.org... 141.76.2.4
        Connecting to ftp.de.debian.org|141.76.2.4|:80... connected.
        HTTP request sent, awaiting response... 200 OK
        Length: 294,274 (287K) [application/x-debian-package]

        100%[====================================>] 294,274      235.50K/s

        18:56:25 (234.31 KB/s) - `libstdc++5_3.3.5-13_i386.deb' saved [294274/294274]

        christian@cobalt ~/Desktop/libstdc++ $ ar x libstdc++5_3.3.5-13_i386.deb
        christian@cobalt ~/Desktop/libstdc++ $ tar xvfz data.tar.gz
        ./
        ./usr/
        ./usr/share/
        ./usr/share/doc/
        ./usr/share/doc/libstdc++5/
        ./usr/share/doc/libstdc++5/copyright
        ./usr/share/doc/libstdc++5/README.Debian
        ./usr/share/doc/libstdc++5/changelog.Debian.gz
        ./usr/lib/
        ./usr/lib/libstdc++.so.5.0.7
        ./usr/lib/libstdc++.so.5
        ----------------------- schnapp -------------------------------------

        Viele Grüße,
        Christian

        --
        "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
        1. Moin!

          ----------------------- schnipp -------------------------------------
          /main/g/gcc-3.3/libstdc++5_3.3.5-13_i386.deb
          --18:56:24--  http://ftp.de.debian.org/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.5-13_i386.deb
                     => `libstdc++5_3.3.5-13_i386.deb'
          Resolving ftp.de.debian.org... 141.76.2.4
          Connecting to ftp.de.debian.org|141.76.2.4|:80... connected.
          HTTP request sent, awaiting response... 200 OK
          Length: 294,274 (287K) [application/x-debian-package]

          100%[====================================>] 294,274      235.50K/s

          18:56:25 (234.31 KB/s) - `libstdc++5_3.3.5-13_i386.deb' saved [294274/294274]

          christian@cobalt ~/Desktop/libstdc++ $ ar x libstdc++5_3.3.5-13_i386.deb
          christian@cobalt ~/Desktop/libstdc++ $ tar xvfz data.tar.gz
          ./
          ./usr/
          ./usr/share/
          ./usr/share/doc/
          ./usr/share/doc/libstdc++5/
          ./usr/share/doc/libstdc++5/copyright
          ./usr/share/doc/libstdc++5/README.Debian
          ./usr/share/doc/libstdc++5/changelog.Debian.gz
          ./usr/lib/
          ./usr/lib/libstdc++.so.5.0.7
          ./usr/lib/libstdc++.so.5
          ----------------------- schnapp -------------------------------------

          Schade, dass man nur einmal "hilfreich" klicken kann.

          Nach aufrufen von ldconfig war python wieder in der Lage, die Lib aufzufinden, und läuft jetzt wieder.

          - Sven Rautenberg

          --
          My sssignature, my preciousssss!
          1. habe d'ehre Sven

            Schade, dass man nur einmal "hilfreich" klicken kann.

            Ohne einen blassen Schimmer von der GCC zu haben gebe ich ihm fuer Dich noch ein "hilfreich".

            man liest sich
            Wilhelm

        2. Hallo Christian.

          ----------------------- schnipp -------------------------------------
          /main/g/gcc-3.3/libstdc++5_3.3.5-13_i386.deb
          --18:56:24--  http://ftp.de.debian.org/debian/pool/main/g/gcc-3.3/libstdc++5_3.3.5-13_i386.deb

          Muss man bei Gentoo in einem solchen Fall wirklich auf externe Quellen zurückgreifen?

          Und kann man dort nicht ebenfalls mehrere GCCs parallel betreiben, wie es unter Debian problemlos möglich ist?

          Einen schönen Donnerstag noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
          1. echo $begrüßung;

            Und kann man dort nicht ebenfalls mehrere GCCs parallel betreiben, wie es unter Debian problemlos möglich ist?

            Du wirst aber auch unter Debian (auf dem Standardweg) keine weiteren Programme installieren können, wenn eine dazu benötigte Bibliothek nicht mehr verfügbar ist.

            echo "$verabschiedung $name";

            1. Hallo dedlfix.

              Und kann man dort nicht ebenfalls mehrere GCCs parallel betreiben, wie es unter Debian problemlos möglich ist?

              Du wirst aber auch unter Debian (auf dem Standardweg) keine weiteren Programme installieren können, wenn eine dazu benötigte Bibliothek nicht mehr verfügbar ist.

              Für diesen Fall gibt es ja auch (im Falle GCC beispielsweise) separate Pakete mit den unterschiedlichen Versionen.

              Einen schönen Donnerstag noch.

              Gruß, Ashura

              --
              sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
              „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
              [HTML Design Constraints: Logical Markup]
          2. Hallo Ashura,

            Muss man bei Gentoo in einem solchen Fall wirklich auf externe Quellen zurückgreifen?

            Wenn Python versagt und damit das Gentoo-Buildsystem nicht mehr funktioniert: ja.

            Und kann man dort nicht ebenfalls mehrere GCCs parallel betreiben, wie es unter Debian problemlos möglich ist?

            Klar. Sven hatte ja gesagt, dass er nach dem Update die alte Version explizit deinstalliert hatte.

            Viele Grüße,
            Christian

            --
            "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
            1. Hallo Christian.

              Und kann man dort nicht ebenfalls mehrere GCCs parallel betreiben, wie es unter Debian problemlos möglich ist?

              Klar. Sven hatte ja gesagt, dass er nach dem Update die alte Version explizit deinstalliert hatte.

              Ahja. Mir war so, als wäre dies erforderlich gewesen.

              Einen schönen Donnerstag noch.

              Gruß, Ashura

              --
              sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
              „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
              [HTML Design Constraints: Logical Markup]
              1. Moin!

                Hallo Christian.

                Und kann man dort nicht ebenfalls mehrere GCCs parallel betreiben, wie es unter Debian problemlos möglich ist?

                Klar. Sven hatte ja gesagt, dass er nach dem Update die alte Version explizit deinstalliert hatte.

                Ahja. Mir war so, als wäre dies erforderlich gewesen.

                Nein, ist es nicht unbedingt. Man kann den GCC 3.4 installieren - das geschieht parallel zum GCC 3.3, und muß dann lediglich mit gcc-config umstellen, dass ab sofort die neue Version benutzt wird. Der alte GCC bleibt für Libs dann immer noch erhalten - die auch weiterhin benutzt werden, solange man das Paket nicht neu kompiliert.

                Wie gesehen: Erst den GCC killen und dann neu kompilieren wollen klappt nicht so gut. ;)

                - Sven Rautenberg

                --
                My sssignature, my preciousssss!