E.1. GCC 2.96

La toile de fond:  La série GCC 2.95 est une version GNU officielle et la version 2.95.3 de GCC est la version la plus exempte de bogues de toute la série. Nous n'avons jamais remarqué de problèmes de compilation que nous pourrions attribuer à GCC 2.95.3. A partir de Red Hat Linux 7.0, Red Hat a inclus une version CVS lourdement patchée de GCC dans sa distribution et l'a nommé 2.96. Red Hat a inclus cette version parce que GCC 3.0 n'était pas terminé à ce moment là, et ils avaient besoin d'un compilateur fonctionnant sur toutes leurs plateformes supportées, incluant IA64 et s390. Le distributeur Linux Mandrake (maintenant Mandriva) a également suivi l'exemple de Red Hat et a lancé la diffusion de GCC 2.96 avec sa série Linux-Mandrake 8.0.

Les évènements:  L'équipe GCC a nié tout lien avec GCC 2.96 et a publié une réponse officielle à GCC 2.96. De nombreux développeurs à travers le monde ont commencé à avoir des problèmes avec GCC 2.96, et plusieurs projets, dont avifile, ont donc recommandé d'autres compilateurs. D'autres liens intéressants sont Linux kernel news flash about kernel 2.4.17 et le Forum Voy. MPlayer a également souffert des problèmes intermittents qui ont tous été résolus en passant à une version différente de GCC. Plusieurs projets en commencé à implémenter des contournements pour quelques-uns des problèmes de 2.96, mais nous avons refusé de réparer les bogues des autres, surtout parce que certains contournements peuvent impliquer une pénalité sur les performances.

GCC 2.96 n'autorise pas les caractères | (pipe) dans les commentaires assembleur parce qu'il supporte aussi bien la syntaxe Intel que la syntaxe AT&T et que le caractère | est un symbole dans la variante Intel. Le problème est qu'il ignore silencieusement le bloc assembleur entier. Cela est théoriquement fixé maintenant, GCC affichant un warning au lieu de sauter le bloc.

Le présent:  Red Hat dit que GCC 2.96-85 et supérieur est réparé. La situation s'est en effet améliorée, mais nous voyons toujours des problèmes sur les listes de diffusion qui disparaissent avec un compilateur différent. Dans tous les cas cela ne peut plus durer. Normalement un GCC 3.x mature résoudra les problèmes. Si vous voulez compiler avec 2.96 passez l'option --disable-gcc-checking à configure. Rappelez-vous que vous êtes seul et donc de ne pas rapporter de bogues. Si vous le faites quand même, préparez-vous au pire comme vous faire insulter, voir banni de nos listes de diffusions car nous en avons par dessus la tête des problèmes relatifs à GCC-2.96 ; alors s'il vous plaît, abstenez-vous.

Si vous avez des problèmes avec GCC 2.96, vous pouvez obtenir les paquetages 2.96-85 sur le serveur ftp de Red Hat, ou d'utiliser les paquetages 3.0.4 offerts avec la version 7.2 et supérieur. Vous pouvez également obtenir les paquetages gcc-3.2.3-37 (non officiels, mais fonctionnant bien) et vous pouvez les installer avec le GCC 2.96 que vous avez déjà. Mplayer les détectera et utilisera 3.2 au lieu de 2.96. Si vous ne voulez pas ou ne pouvez pas utiliser les paquetages binaires, voici comment vous pouvez compiler GCC 3 depuis les sources:

  1. Allez sur la page des miroirs GCC et téléchargez gcc-core-XXX.tar.gzXXX est le numéro de version. Ceci inclus le compilateur C complet et est suffisant pour MPlayer. Si vous voulez aussi C++, Java ou certaines autres fonctions avancées de GCC, gcc-XXX.tar.gz pourrait mieux convenir à vos besoins.

  2. Décompressez l'archive avec

    tar -xvzf gcc-core-XXX.tar.gz

  3. GCC n'est pas construit depuis le répertoire source lui-même comme c'est le cas pour la plupart des programmes, mais a besoin d'un répertoire de construction à l'extérieur du répertoire source. Vous devez donc créer ce répertoire via

    mkdir gcc-build

  4. Ensuite vous pouvez procéder à la configuration de GCC dans le répertoire de construction, mais vous aurez besoin de le configurer depuis le répertoire source:

    cd gcc-build
    ../gcc-3.XXX/configure

  5. Compilez GCC en tapant cette commande dans le répertoire de construction:

    make bootstrap

  6. Maintenant vous pouvez installer GCC (en root) en tapant

    make install