GCC 3.0.2 est disponible

Posté par  . Modéré par Fabien Penso.
Étiquettes :
0
26
oct.
2001
GNU
Le GCC nouveau est disponible. Au menu : des corrections de bogues (dans le deroulement des boucles), de meilleurs optimisations pour les architectures x86, et l'implementation des descripteurs de fonctions dans des tables virtuelles pour le C++ sur IA64.

Aller plus loin

  • # précisions

    Posté par  . Évalué à 10.

    juste pour donner deux URL,

    l'annonce avec quelques détails:
    http://gcc.gnu.org/ml/gcc-announce/2001/msg00004.html(...)

    le problème pour les utilisateurs de BSD:
    http://gcc.gnu.org/ml/gcc-announce/2001/msg00005.html(...)
  • # symboles ?

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

    Bonjour,

    j'ai pas mal entendu parler de problemes de compatibilite des symboles des gcc 3.X.X

    Quelqu'un pourrait il m'expliquer, clairement parce que je ne hack pas (encore :) gcc, comment tu ca fonctionne/ne fonctionne pas ?

    Ca serait sympa
    • [^] # Re: symboles ?

      Posté par  . Évalué à -4.

      vi je suis assez pour que des personnes expliques clairement si les problemes de symboles existent encore.
      me suis refait une lfs a cause de ca !!!
    • [^] # Re: symboles ?

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

      En gros, en C++, les bibliothèques (i.e le nommage et la structure des symboles, l'ABI (Application Binary Interface)) sont dépendantes du compilateur (ou plutôt de son ABI). Il y a eu un changement d'ABI entre gcc 2.95.x et gcc 3.x. Donc les bibliothèques compilées avec l'un ne sont pas utilisables avec l'autre.

      Cela ne s'applique pas au C.
      • [^] # Re: symboles ?

        Posté par  . Évalué à -3.

        pourkoi ya t-il un probleme avec la glibc 2.2.4 kan on la compile avec gcc3 alors , kuiske c une librarie ecrite en C ?
        • [^] # Re: symboles ?

          Posté par  . Évalué à 1.

          Bonjour,
          Je n'ai rien compris à ton message, peux-tu le reformulé stp ?

          (c'est une vrai demande)
          • [^] # Re: symboles ?

            Posté par  . Évalué à 0.

            tu es au courant du probleme de compatibilite entre la glibc (2.2.4) et gcc 3.x,
            en fait kan tu veux compiler la glibc avec gcc 3
            le configure te dit que si tu compile avec gcc 3 ta libC ne fonctionnera pas avec les versions anterieur ou superieur de glibc.
            notemment a cause des symboles d'apres ce que j'ai comprid.
            or tu disais que le problemes de symboles n'affectait pas les librairies/exec compiler en C

            c'est plus clair la ?
            • [^] # Re: symboles ?

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

              Je pense que c'est parce que la glibc est un cas un peu à part parmi les bibliothèques C. Elle est à la base de tout le système, et tous les programmes s'appuient sur elles. Y compris les binutils par exemple, qui permettent de produire et d'interprèter les objets, les bibliothèques dynamiques , etc. Bref la libc doit aussi avoir besoin de connaître/reconnaître certaines parties des symboles. Donc il faut une bonne version de gcc et une bonne version de la libc.

              (Par exemple gcc 3.x ne compile pas sur une Patate Sparc, car il faut au moins une glibc 2.2.x et peut-être pas n'importe quel x en plus)
              • [^] # Re: symboles ?

                Posté par  . Évalué à 2.

                ok pour ca, mais est-ce que dans un avenir proche, gcc sera capable de compiler avec un system de symboles compatible entre la version 2.95 et 3.x ??? car c'est bien d'avoir un nouveau gcc mais si les binaires ne sont pas compatibles c'est un peu chiant, surtout pour la glibc !!!
                • [^] # Re: symboles ?

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

                  A priori l'idée est que les librairies compilées avec le 2.95 disparaissent progressivement. Soit tu gardes un vieux systeme genre patate et tu gardes gcc 2.95, ca ne pose pas de probleme. Soit tu as un système récent avec des librairies qui fonctionnent avec gcc 3.0 . A mon avis, il n'y a pas de raisons de mettre à jour gcc et pas ton système.
                • [^] # Re: symboles ?

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

                  Une fois que tu as une glibc compilée qui va bien, le problème ne concerne plus que les bibliothèques C++, comme dit précédemment. Si tu veux utiliser une ou plusieurs bibliothèques C++ compilées avec un 2.95, tu utilises g++ 2.95. Pour une ou plusieurs biblio C++ compilées avec un 3.0, tu utilises un g++ 3.0. Par contre tu ne peux pas panacher. Mais bon le 3.0, c'est quand même autre chose au niveau C++ (respect des standards, STL, etc).
                  • [^] # Re: symboles ?

                    Posté par  . Évalué à 0.

                    ok donc on est bien d'accord sur le principe,
                    maintenant si j'ai tout qui est compiler avec gcc3.x et que je met une nouvelle glibc genre 2.2.4 (compiler avec gcc3.x donc) cela ne devrait poser aucun probleme, or le message dans le configure, dit clairement que ca pose un probleme !

                    et la je trouve pas ca logique
      • [^] # Re: symboles ?

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

        Merci cher Oumph, mais tu vas trop vite :)

        Resumons, je connais un peu le C et l'assembleur, le fonctionnement de la pile...

        Pour moi gcc produit du code machine (ok, pas directement).
        En compilant un truc, on obtient une suite d'octet, que seul ton proc comprend. Arrete moi si je dis une connerie :)

        L'ABI est donc un grand truc ki contient plein d'info sur les symbols, mais lesquelles ?tailles ? adresse ?

        Mais dans tout ca je ne comprend pas a quoi servent les symbols ! Quels sont leurs roles ? Quel information contiennent ils ?
        • [^] # Re: symboles ?

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

          On va pas tarder à sortir de mon niveau de compétence et je fais faire un Core dumped :)

          Sur la nouvelle ABI :
          http://www.codesourcery.com/cxx-abi/(...)

          Les symboles, c'est ce que tu vois quand tu fais un nm sur un .o ou un .a par exemple : les fonctions définies ou utilisées, les attributs définis ou utilisés, etc. Donc leur nom, leur taille, leur emplacement en mémoire, qui les définit, qui les utilise, etc.
        • [^] # Re: symboles ?

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

          A mon humble avis, l'ABI est à regarder comme une sorte de table des matières qui associe à chaque symbole (point d'entrée dans le binaire, par exemple une fonction) une adresse pour la retrouver au moment de la compilation et/ou du lancement. L'ABI est évidemment différente pour le C et le C++ puisque ils ont des "points d'entrée" différents (classes, etc). Comme cette fameuse ABI a changé entre le 2.95 et le 3.0, les memes infos ne se trouvent plus au même endroit, d'où l'incompatibilité observée. Voilà ma conception de l'ABI mais je peux me tromper.
    • [^] # Re: symboles ?

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

      Les plus gros changements concernent en effet
      l'ABI du C++, et là les fichiers objets générés à
      partir de GCC-2 et GCC-3 sont totalement incompatibles...

      Pour les problemes avec la glibc, (qui sont aussi les problemes du kernel), c'est lié au changement
      dans le fonctionnement des declarations inline static ou extern. Il y a peut etre d'autre problemes mais c'est tout ce que je sais ...
      • [^] # Re: symboles ?

        Posté par  . Évalué à 1.

        les fichiers objets générés à
        partir de GCC-2 et GCC-3 sont totalement incompatibles...

        Ce qui n'est pas si étonnant puisqu'il est ici question d'un changement de version majeure.
    • [^] # Re: symboles ?

      Posté par  . Évalué à 2.

      Quand on declare une fonction ou une variable en C, le nom du symbole qu'on retrouve (avec nm) dans un objet est le nom donné en C:
      toto.c:

      void toto(int a) {
      return;
      }
      gcc -c toto.c donne:

      toto.o
      00000000 t gcc2_compiled.
      00000000 T toto

      En C++, le nom de la fonction n'est pas suffisant, il faut aussi le type des arguments.

      g++-2.95.3 -c toto.c donne:
      00000000 ? __FRAME_BEGIN__
      00000000 t gcc2_compiled.
      00000000 T toto__Fi

      gcc 3 utilise une autre convention pour coder le type des arguments.

      g++-3 -c toto.c donne:
      00000000 T _Z4totoi
      Quand un autre fichier objet utilisant la fonction toto doit être créé, il faut savoir quelle convention utiliser. C'est là, je pense, qu'intervient l'incompatibilité entre gcc 2 et gcc 3.

      Question pour les curieux: que se passe-t-il si je lie le dernier toto.o avec un titi.c compilé avec gcc contenant la définition suivante:
      int _Z4totoi;
      • [^] # Re: symboles ?

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

        $ cat titi.c
        int _Z4totoi;

        int main()
        {
        }
        $ nm toto.o
        00000000 T _Z4totoi
        $ nm titi.o
        00000000 B _Z4totoi
        00000000 T main
        $ g++-3.0 toto.o titi.o
        titi.o(.bss+0x0): multiple definition of `toto(int)'
        toto.o(.text+0x0): first defined here
        /usr/bin/ld: Warning: size of symbol `toto(int)' changed from 5 to 4 in titi.o
        /usr/bin/ld: Warning: type of symbol `toto(int)' changed from 2 to 1 in titi.o
        collect2: ld returned 1 exit status
  • # compilation de KDE

    Posté par  . Évalué à 8.

    Contrairement à gcc 3.0.1, peut-on compiler KDE avec cette version ?

    Le code généré par g++ 3.0 est-il plus performant que sont celui de son prédécesseur (je pense au template par exemple) ?
  • # pfffff.........

    Posté par  . Évalué à 0.

    l'install du gcc 3.0.2 a la place du 3.0.1 m'a pourri la libgcc_s.so (liens libgcc_s.so -> libgcc_s.so.1 et libgcc_s.so.1 -> libgcc_s.so.1 !) ; presque plus rien ne marchait (meme pas de ls, cp, ln...).
    il a fallu que je boot sur un CD, supprime les /usr/lib/libgcc_s.* et relance l'installe du gcc 3.0.2 pour que cela reparte (ouf)

Suivre le flux des commentaires

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