Forum Linux.général question de libstdc++

Posté par  .
Étiquettes : aucune
0
3
fév.
2009
Bonjour Forum !

J'utilise Linux SUSE 9.1 - J'ai installé un logiciel (virtual box) qui ne veux pas tourner, car il réclame libstdc++6 alors que ma distro fournit libstdc++5.

Pourriez vous expliquer en termes simples comment faire pour résoudre cette incompatibilité sans casser les autres applications ? Naturellement, SUSE 9.1 ne fournit pas cette version de GNU C++ !

Puis-je me contenter de faire un lien vers l'actuelle librairie C++ (5) ?

Ou bien puis-je charger libstdc++.so.6 (d'où la prendre ?) et la mettre (dans quel répertoire ?) en parallèle avec l'installation existante ? Je crois avoir lu quelque part qu'il existe un moyen de désigner un chemin de librairies pour lancer un programme particulier.

Comme vous voyez cher Forum, je suis nouveau sous Linux, donc j'aurais besoin d'instructions assez détaillées - mais SVP ne me dites pas de changer de distro, ce n'est en aucun cas le but de l'exercice.

--
Mongo
  • # Bizarre

    Posté par  (site web personnel) . Évalué à 3.

    Je suis étonné, la suse 9.1 c'est si vieux que ca ? Il n'y a pas de paquet pour la version 6 ?

    Tu ne peux pas faire un lien vers la 5, c'est garanti que ca ne marchera pas, les numéro de version majeur sont là à cause de ca.

    Si tu peux trouver une version 6, tu peux la mettre a coté de la 5 dans /usr/lib ca ne posera pas de problème.
    • [^] # Re: Bizarre

      Posté par  (site web personnel) . Évalué à 3.

      La suse 9.1 date de juin 2004, ce qui n'est pas tout récent

      Elle utilisait gcc 3.3.4, et le passage à la libstdc++ 6 date du passage à gcc 3.4.0 qui venait juste de sortir (20 Avril 2004) donc rien de surprenant :)
      • [^] # changer la libstdc

        Posté par  . Évalué à 2.

        Merci de votre accueil !

        J'ai téléchargé une version compilée (ELF) de la libstdc++.so.6.0.7 - compatible, j'espère, avec mon processeur et mon noyau - et l'ai mise à coté de l'ancienne, sous /usr/lib/

        J'ai créé un lien nommé libstdc++.so.6 vers la nouvelle lib.

        En dépit de ces efforts, VBox continue de réclamer libstdc.so.6 !

        Je suppose qu'il n'est pas question de faire pointer le lien de plus hait niveau, "libstdc.so" vers la nouvelle lib ?

        J'ai lu qqpart qu'il est possible de spécifier une libraire "de rechange" au lancement d'un programme particulier, mais je ne retrouve pas la référence...

        Je suis sans doute naif, mais il me semble que je ne suis pas loin du but maintenant; pouvez-vous m'aider ?
        • [^] # Re: changer la libstdc

          Posté par  (site web personnel) . Évalué à 2.

          Il faut trouver le binaire vbox et taper la commande ldd

          ldd /usr/bin/vbox

          Cela te dira ce que cherche le binaire comme bibliothèque pour fonctionner.

          Sinon pour spécifier une bibliothèque avant le chargement, il existe la variable LD_PRELOAD.
          • [^] # Re: changer la libstdc

            Posté par  . Évalué à 1.

            Bon j'ai avancé : VirtualBox trouve et charge bien libstdc++.so.6, mais il se produit une exception de virgule flottante tandis qu'elle charge, ou tente de charger, "libncurses.so". C'est vraiment étrange comme erreur !

            J'ai obtenu ces infos en definissant la variable :
            # export LD_DEBUG=libs
            Puis en lançant VirtualBox dans un terminal. Le rapport montre bien que ma libstdc++.so.6 est trouvée et chargée (partie du rapport non copiée ici). Mais un peu plus tard, comme ceci, couic! :

            _______________________________________________________________________
            (....)
            9289: find library=libncurses.so.5; searching
            9289: search path=/opt/VirtualBox-2.1.2 (RPATH
            from file ./VirtualBox)
            9289: trying file=/opt/VirtualBox-2.1.2/libncurses.so.5
            9289: search path=/opt/VirtualBox-2.1.2 (RPATH
            from file ./VirtualBox)
            9289: trying file=/opt/VirtualBox-2.1.2/libncurses.so.5
            9289: search cache=/etc/ld.so.cache
            9289: trying file=/lib/libncurses.so.5
            9289:
            Exception en point flottant
            _______________________________________________________________


            ... Et voici la fin du rapport obtenu avec LD_DEBUG=all :

            _______________________________________________________________
            (....)
            9414: checking for version `GLIBC_2.1' in file
            /lib/tls/libc.so.6 required by file /lib/libncurses.so.5
            9414: checking for version `GLIBC_2.0' in file
            /lib/tls/libc.so.6 required by file /lib/libncurses.so.5
            9414:
            9414: relocation processing: /lib/libncurses.so.5
            9414: symbol=_nc_outch; lookup in file=./VirtualBox
            9414: symbol=_nc_outch; lookup in
            file=/lib/tls/libpthread.so.0
            9414: symbol=_nc_outch; lookup in file=/lib/libdl.so.2
            9414: symbol=_nc_outch; lookup in
            file=/usr/lib/libstdc++.so.6
            9414: symbol=_nc_outch; lookup in file=/lib/tls/libc.so.6
            9414: symbol=_nc_outch; lookup in file=/lib/ld-linux.so.2
            9414: symbol=_nc_outch; lookup in file=/lib/tls/libm.so.6
            9414: symbol=_nc_outch; lookup in file=/lib/libgcc_s.so.1
            9414: symbol=_nc_outch; lookup in file=/opt/VirtualBox-
            2.1.2/VBoxRT.so
            9414: symbol=_nc_outch; lookup in file=/lib/tls/librt.so.1
            9414: symbol=_nc_outch; lookup in file=/opt/VirtualBox-
            2.1.2/VirtualBox.so
            9414: symbol=_nc_outch; lookup in file=/opt/VirtualBox-
            2.1.2/VBoxKeyboard.so
            9414: symbol=_nc_outch; lookup in file=/opt/VirtualBox-
            2.1.2/VBoxRT.so
            9414: symbol=_nc_outch; lookup in
            file=/usr/X11R6/lib/libXcursor.so.1
            9414: symbol=_nc_outch; lookup in
            file=/usr/X11R6/lib/libXext.so.6
            9414: symbol=_nc_outch; lookup in
            file=/usr/X11R6/lib/libX11.so.6
            9414: symbol=_nc_outch; lookup in file=/opt/VirtualBox-
            2.1.2/VBoxXPCOM.so
            9414: symbol=_nc_outch; lookup in file=/opt/VirtualBox-
            2.1.2/libVBoxQtCore.so.4
            9414: symbol=_nc_outch; lookup in file=/opt/VirtualBox-
            2.1.2/libVBoxQtGui.so.4
            9414: symbol=_nc_outch; lookup in file=/opt/VirtualBox-
            2.1.2/libVBoxQtNetwork.so.4
            9414: symbol=_nc_outch; lookup in file=/usr/lib/libSDL-
            1.2.so.0
            9414: symbol=_nc_outch; lookup in
            file=/usr/lib/libstdc++.so.6
            9414: symbol=_nc_outch; lookup in file=/lib/libgcc_s.so.1
            9414: symbol=_nc_outch; lookup in file=/lib/tls/libc.so.6
            9414: symbol=_nc_outch; lookup in
            file=/lib/tls/libpthread.so.0
            9414: symbol=_nc_outch; lookup in file=/lib/tls/librt.so.1
            9414: symbol=_nc_outch; lookup in file=/lib/libdl.so.2
            9414: symbol=_nc_outch; lookup in
            file=/usr/X11R6/lib/libXrender.so.1
            9414: symbol=_nc_outch; lookup in file=/lib/tls/libm.so.6
            9414: symbol=_nc_outch; lookup in
            file=/usr/lib/libfontconfig.so.1
            9414: symbol=_nc_outch; lookup in file=/lib/libz.so.1
            9414: symbol=_nc_outch; lookup in
            file=/opt/gnome/lib/libgthread-2.0.so.0
            9414: symbol=_nc_outch; lookup in
            file=/opt/gnome/lib/libglib-2.0.so.0
            9414: symbol=_nc_outch; lookup in
            file=/usr/lib/libpng12.so.0
            9414: symbol=_nc_outch; lookup in
            file=/usr/X11R6/lib/libSM.so.6
            9414: symbol=_nc_outch; lookup in
            file=/usr/X11R6/lib/libICE.so.6
            9414: symbol=_nc_outch; lookup in
            file=/usr/X11R6/lib/libXi.so.6
            9414: symbol=_nc_outch; lookup in
            file=/usr/X11R6/lib/libXrandr.so.2
            9414: symbol=_nc_outch; lookup in
            file=/usr/lib/libXfixes.so.3
            Exception en point flottant
            _________________________________________________________________

            Que se passe-t-il donc là ? Merci de votre aide, je me sens vraiment, de plus en plus....
            --
            Mongolinux
            • [^] # Re: changer la libstdc

              Posté par  . Évalué à 2.

              au hasard de ton rapport

              [...]9414: checking for version `GLIBC_2.1' in file
              /lib/tls/libc.so.6 required by file /lib/libncurses.so.5
              9414: checking for version `GLIBC_2.0' in file
              /lib/tls/libc.so.6 required by file /lib/libncurses.so.5[...]


              apres libstdc++.so.6 il semblerait qu'il te faille un /lib/tls/libc.so.6
              • [^] # Re: changer la libstdc

                Posté par  . Évalué à 1.

                > apres libstdc++.so.6 il semblerait qu'il te faille un /lib/tls/libc.so.6

                euh, non, je l'ai bien celle-là. Je crois que ce n'est pas ce que dis le rapport.
            • [^] # Re: changer la libstdc

              Posté par  (site web personnel) . Évalué à 2.

              Ouh la je le sens mal. A vu de nez (je n'ai pas mieux) je dirais un problème d'abi.
              Ce qui veut dire qu'il faudrait, plutot que de récupérer une libstdc++ et de l'installer telle quelle, en récupérer les sources et la recompiler.
              • [^] # Re: changer la libstdc

                Posté par  . Évalué à 1.

                à Peck : oui c'est du domaine du possible. Je vais tâcher...

                --
                Mongo

                La peinture à l'huile c'est bien difficile...
              • [^] # Re: changer la libstdc

                Posté par  . Évalué à 1.

                Bon, j'ai trouvé un paquet RPM de gcc_34 pour SUSE, et l'ai installé dans son chemin, puis copié sa libstdc++.so.6.0.3 vers /usr/lib, un lien, fait ldconfig et tout et tout...

                Pourtant j'ai toujours la meme exception de "point flottant" (sic) -
                ceci me semble confirmer que le problème ne vient pas de libstdc++.

                Il semble que ce soit libncurses qui 'tue' le chargeur, pourtant le numero de version est compatible.

                Ça devient épique pour ne pas dire héroïque, je trouve :(

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.