Subversion Repositories svn LFS-FR

Rev

Rev 1342 | Rev 1347 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
 <!ENTITY % general-entities SYSTEM "../general.ent">
  %general-entities;
]>

<sect1 id="ch-system-gcc" role="wrap">
  <?dbhtml filename="gcc.html"?>

  <sect1info condition="script">
    <productname>gcc</productname>
    <productnumber>&gcc-version;</productnumber>
    <address>&gcc-url;</address>
  </sect1info>

  <title>GCC-&gcc-version;</title>

  <indexterm zone="ch-system-gcc">
    <primary sortas="a-GCC">GCC</primary>
  </indexterm>

  <sect2 role="package">
    <title/>

    <para>Le paquet GCC contient la collection de compilateurs GNU, qui
    inclut les
    compilateurs C et C++.</para>

    <segmentedlist>
      <segtitle>&buildtime;</segtitle>
      <segtitle>&diskspace;</segtitle>

      <seglistitem>
        <seg>&gcc-ch6-sbu;</seg>
        <seg>&gcc-ch6-du;</seg>
      </seglistitem>
    </segmentedlist>

  </sect2>

  <sect2 role="installation">
    <title>Installation de GCC</title>

    <para>Appliquez une substitution <command>sed</command> qui
    supprimera l'installation de

    <filename class="libraryfile">libiberty.a</filename>. À la place, la
    version de

    <filename class="libraryfile">libiberty.a</filename> fournie par
    Binutils sera utilisée&nbsp;:</para>

<screen><userinput remap="pre">sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in</userinput></screen>

    <para>Comme au <xref linkend="ch-tools-gcc-pass2"/>, appliquez la commande
    <command>sed</command> suivant pour obliger la construction à utiliser le drapeau de construction
    <option>-fomit-frame-pointer</option> afin de garantir des constructions de compilateur cohérentes&nbsp;:</para>

<screen><userinput remap="pre">case `uname -m` in
  i?86) sed -i 's/^T_CFLAGS =$/&amp; -fomit-frame-pointer/' \
        gcc/Makefile.in ;;
esac</userinput></screen>

    <para>Le script <command>fixincludes</command> est connu pour
    s'efforcer parfois, de manière inadéquate, de &quot;réparer&quot;
    les en-têtes du système installées précédemment. Comme les en-têtes
    installées par GCC-&gcc-version; et Glibc-&glibc-version; sont
    connues pour ne pas avoir besoin de réparation, lancez la commande
    suivante pour empêcher le script <command>fixincludes</command> de
    s'exécuter&nbsp;:</para>

<screen><userinput remap="pre">sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in</userinput></screen>

    <para>La documentation de GCC recommande de construire GCC en dehors
    du répertoire source, c'est-à-dire dans un répertoire
    dédié&nbsp;:</para>

<screen><userinput remap="pre">mkdir -v ../gcc-build
cd ../gcc-build</userinput></screen>

    <para>Préparez la compilation de GCC&nbsp;:</para>

<screen><userinput remap="configure">../gcc-&gcc-version;/configure --prefix=/usr \
    --libexecdir=/usr/lib --enable-shared \
    --enable-threads=posix --enable-__cxa_atexit \
    --enable-clocale=gnu --enable-languages=c,c++ \
    --disable-multilib --disable-bootstrap --with-system-zlib</userinput></screen>

    <variablelist>
      <title>Voici la signification de la nouvelle option de configure&nbsp;:</title>

      <varlistentry>
        <term><parameter>--with-system-zlib</parameter></term>
        <listitem>
          <para>Ce paramètre dit à GCC de se lier à la copie installée sur le système
          de la bibliothèque Zlib, plutôt qu'à sa propre copie interne.</para>
        </listitem>
      </varlistentry>
    </variablelist>

    <para>Remarquez que pour d'autres langages, il y a des prérequis qui ne
    sont pas disponibles. Voir le livre BLFS pour des instructions sur la
    façon de construire tous les langages supportés par GCC.</para>
   
    <para>Compilez le paquet&nbsp;:</para>

<screen><userinput remap="make">make</userinput></screen>

    <important>
      <para>Dans cette section, la suite de tests pour GCC est considérée

      critique. Ne les sautez sous aucun prétexte.</para>
    </important>
 
   <para>Un ensemble de tests dans la suite de tests de GCC est connu pour
   déborder la pile, donc augmentez la taille de la pile avant de lancer les
   tests&nbsp;:</para>

<screen><userinput remap="test">ulimit -s 16384</userinput></screen>

    <para>Testez les résultats mais ne vous arrêtez pas aux
    erreurs&nbsp;:</para>

<screen><userinput remap="test">make -k check</userinput></screen>

    <para>Pour recevoir un résumé des résultats de la suite de tests,
    lancez&nbsp;</para>
   
<screen><userinput remap="test">../gcc-&gcc-version;/contrib/test_summary</userinput></screen>

    <para>Pour n'avoir que les résumés, redirigez la sortie vers

    <userinput>grep -A7 Summ</userinput>.</para>

    <para>Vous pouvez comparer les résultats avec ceux situés dans
     <ulink url="&test-results;"/> et <ulink url="http://gcc.gnu.org/ml/gcc-testresults/"/>.</para>

    <para>Quelques échecs inattendus sont inévitables. Les développeurs
    de GCC connaissent ces problèmes, mais ne les ont pas encore
    résolus. En particulier, les tests de

    <filename class="libraryfile">libmudflap</filename> sont connus pour
    être particulièrement problématiques et résultant d'un bogue dans
    GCC

    (<ulink url="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20003"/>).
    Sauf si les résultats du test sont très différents de ceux sur
    l'adresse ci-dessus, vous pouvez continuer en toute sécurité.</para>

    <para>Installez le paquet&nbsp;:</para>

<screen><userinput remap="install">make install</userinput></screen>

    <para>Quelques paquets s'attendent à ce que le préprocesseur C soit
    installé dans le répertoire

    <filename class="directory">/lib</filename> Pour supporter ces
    paquets, créez ce lien symbolique&nbsp;:</para>

<screen><userinput remap="install">ln -sv ../usr/bin/cpp /lib</userinput></screen>

    <para>Beaucoup de paquets utilisent le nom <command>cc</command>
    pour appeler le compilateur C. Pour satisfaire ces paquets, créez un
    lien symbolique&nbsp;:</para>

<screen><userinput remap="install">ln -sv gcc /usr/bin/cc</userinput></screen>

    <para>Maintenant que notre chaîne d'outils est en place, il est
    important de s'assurer à nouveau que la compilation et l'édition de
    liens fonctionneront comme prévu. Cela se fait en effectuant les
    mêmes tests de propreté que ceux faits plus haut dans ce
    chapitre&nbsp;:</para>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='a'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='b'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='c'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='d'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='e'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='f'])"/>

<screen><computeroutput>/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/../../../crt1.o succeeded
/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/../../../crti.o succeeded
/usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/../../../crtn.o succeeded</computeroutput></screen>

    <para>Selon l'architecture de votre machine, le message ci-dessus peut
    légèrement différer, la différence portant normalement sur le nom du
    répertoire après <filename class="directory">/usr/lib/gcc</filename>. Si
    votre machine est un système 64 bits, il se peut que vous voyiez un
    répertoire nommé <filename class="directory">lib64</filename>vers la fin de
    la chaîne. La chose importante à chercher est que <command>gcc</command> ait trouvé les trois
    <filename>crt*.o</filename> sous le répertoire
    <filename class="directory">/usr/lib</filename>.</para>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='g'])"/>

<screen><userinput>grep -B4 '^ /usr/include' dummy.log</userinput></screen>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='h'])"/>

<screen><computeroutput>#include &lt;...&gt; search starts here:
 /usr/local/include
 /usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/include
 /usr/lib/gcc/i686-pc-linux-gnu/&gcc-version;/include-fixed
 /usr/include</computeroutput></screen>

    <para>A nouveau, notez que le nom du répertoire apres votre triplette cible
    peut être différent de celui ci-dessus, selon votre architecture.</para>
   
    <note><para>Depuis la version 4.3.0, GCC installe maintenant sans
    condition le fichier <filename>limits.h</filename> dans un répertoire
    à part <filename class="directory">include-fixed</filename>, et ce
    répertoire doit être en place.</para></note>
    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='i'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='j'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='k'])"/>

<screen><computeroutput>SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");</computeroutput></screen>

    <para>Il se peut qu'un système 64 bits voie un peu plus de répertoires.
    Par exemple, voici la sortie d'une machine x86_64&nbsp;:</para>
   
<screen><computeroutput>SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib64")
SEARCH_DIR("/usr/local/lib64")
SEARCH_DIR("/lib64")
SEARCH_DIR("/usr/lib64")
SEARCH_DIR("/usr/x86_64-unknown-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");</computeroutput></screen>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='l'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='m'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='n'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='o'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='p'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='q'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='r'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='s'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='t'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='u'])"/>

    <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
   href="readjusting.xml"
   xpointer="xpointer(//*[@os='v'])"/>

  </sect2>

  <sect2 id="contents-gcc" role="content">
    <title>Contenu de GCC</title>

    <segmentedlist>
      <segtitle>Programmes installés</segtitle>
      <segtitle>Bibliothèques installés</segtitle>
      <segtitle>Répertoires installés</segtitle>

      <seglistitem>
        <seg>c++, cc (lien vers gcc), cpp, g++, gcc, gccbug et gcov</seg>
        <seg>libgcc.a, libgcc_eh.a, libgcc_s.so, libgcov.a, libgomp.{a,so},
        libmudflap.{a,so}, libmudflapth.{a,so}, libssp.{a,so},
        libssp_nonshared.a, libstdc++.{a,so} et libsupc++.a</seg>
        <seg>/usr/include/c++, /usr/lib/gcc, /usr/share/gcc-&gcc-version;</seg>

      </seglistitem>
    </segmentedlist>

    <variablelist>
      <bridgehead renderas="sect3">Descriptions courtes</bridgehead>
      <?dbfo list-presentation="list"?>
      <?dbhtml list-presentation="table"?>

      <varlistentry id="c">
        <term><command>c++</command></term>
        <listitem>
          <para>Le compilateur C++</para>
          <indexterm zone="ch-system-gcc c">
            <primary sortas="b-c++">c++</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="cc">
        <term><command>cc</command></term>
        <listitem>
          <para>Le compilateur C</para>
          <indexterm zone="ch-system-gcc cc">
            <primary sortas="b-cc">cc</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="cpp">
        <term><command>cpp</command></term>
        <listitem>
          <para>Le préprocesseur C&nbsp;; il est utilisé par le compilateur pour
          l'extension des instructions #include, #define et d'autres instructions similaires
          dans les fichiers sources</para>
          <indexterm zone="ch-system-gcc cpp">
            <primary sortas="b-cpp">cpp</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="g">
        <term><command>g++</command></term>
        <listitem>
          <para>Le compilateur C++</para>
          <indexterm zone="ch-system-gcc g">
            <primary sortas="b-g++">g++</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="gcc">
        <term><command>gcc</command></term>
        <listitem>
          <para>Le compilateur C</para>
          <indexterm zone="ch-system-gcc gcc">
            <primary sortas="b-gcc">gcc</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="gccbug">
        <term><command>gccbug</command></term>
        <listitem>
          <para>Un script shell utilisé pour aider à la création de bons
          rapports de bogues</para>
          <indexterm zone="ch-system-gcc gccbug">
            <primary sortas="b-gccbug">gccbug</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="gcov">
        <term><command>gcov</command></term>
        <listitem>
          <para>Un outil de tests&nbsp;; il est utilisé pour analyser les programmes et
          savoir où des optimisations seraient suivies du plus d'effet</para>
          <indexterm zone="ch-system-gcc gcov">
            <primary sortas="b-gcov">gcov</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libgcc">
        <term><filename class="libraryfile">libgcc</filename></term>
        <listitem>
          <para>Contient un support en exécution pour <command>gcc</command></para>
          <indexterm zone="ch-system-gcc libgcc">
            <primary sortas="c-libgcc*">libgcc*</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libgcov">
        <term><filename class="libraryfile">libgcov</filename></term>
        <listitem>
          <para>Cette bibliothèque est liée à un programme on demande à GCC d'activer le profiling</para>
          <indexterm zone="ch-system-gcc libgcov">
            <primary sortas="c-libgcov">libgcov</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libgomp">
        <term><filename class="libraryfile">libgomp</filename></term>
        <listitem>
          <para>Implémentation GNU de l'API OpenMP API pour la programmation en mémoire parallèle partagée pour plusieurs plateforme en
          C/C++ et Fortran</para>
          <indexterm zone="ch-system-gcc libgomp">
            <primary sortas="c-libgomp">libgomp</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libmudflap">
        <term><filename class="libraryfile">libmudflap</filename></term>
        <listitem>
          <para>Contient des routines qui  supportent la fonctionnalité de test
          des limites de GCC</para>
          <indexterm zone="ch-system-gcc libmudflap">
            <primary sortas="c-libmudflap*">libmudflap*</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libssp">
        <term><filename class="libraryfile">libssp</filename></term>
        <listitem>
          <para>Contient des routines supportant la fonctionalité de GCC de protection
          contre les débordements de mémoire</para>
          <indexterm zone="ch-system-gcc libssp">
            <primary sortas="c-libssp*">libssp*</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libstdc">
        <term><filename class="libraryfile">libstdc++</filename></term>
        <listitem>
          <para>La bibliothèque C++ standard</para>
          <indexterm zone="ch-system-gcc libstdc">
            <primary sortas="c-libstdc++">libstdc++</primary>
          </indexterm>
        </listitem>
      </varlistentry>

      <varlistentry id="libsupc">
        <term><filename class="libraryfile">libsupc++</filename></term>
        <listitem>
          <para>Fournit des routines de support pour le langage de programmation C++</para>
          <indexterm zone="ch-system-gcc libsupc">
            <primary sortas="c-libsupc++">libsupc++</primary>
          </indexterm>
        </listitem>
      </varlistentry>

    </variablelist>

  </sect2>

</sect1>