SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Rappels de
développem ent



 REF. OSP001


                 GAYET Thierry
                 Thier r y.Gayet @lapost e.n et
Plan de la présentation


              Introduction
              Extensions de fichiers
              Chaîne de création
              Compilation
              Linkage
              Librairies dynamiques
              Librairie statique
              Conclusion
              Références




 28/ 02/ 05                            2
Introduction


  A l 'ai d e d 'u n l an g ag e d on n é, il est p ossi b l e d e com p i ler l a r et r an scr ip t ion
          d 'u n al gor i t h m e, l u i - m êm e i ssu d 'u n e an alyse, af in d 'en ob t en i r u n
        b in air e, exécu t abl e ou n on , u ne l ibr ai r i e dynam i qu e ou b ien st at iq u e.

   Un e d escr ip t i on d e ces d i f f ér en t es t r an sf or m at i on s est d ét ai ll ée d an s ce
                                       d ocu m en t d e syn t h èse.

  Il t r ait e p r i n ci p al em en t d es p lat ef or m es SUN OS et Sol ar i s, IBM Ai x et b i en
                                en t en d u GUN Li n u x (t ou t es d i st r i b u t i ons).




28/ 02/ 05                                                                                                  3
Ex tensions                  1/ 2


       .c      Source en langage C nécessitant un pré- processing
       .i      Source en langage C ne nécessitant pas de pré- processing

       .cc
       .cp
       .cxx
       .cpp/
               Source en langage C+ + nécessitant un pré- processing
       .c+ +
       .C

       .ii     Source en langage C+ + ne nécessitant pas de pré- processing

       .h      Fichier header ne devant pas être compilé ou linké !!!!




 28/ 02/ 05                                                                   4
Ex tensions                 2/ 2


       .s     Source en langage assembleur nécessitant un pré- processing.

       .S     Source en langage assembleur ne nécessitant pas de pré-
              processing.

       .o     Fichier objet en langage machine.

       .a     Librairie statique (et dynamique sous IBM Aix ).

       .so    Librairie dynamique (GNU Linux et SUN Solaris).




 28/ 02/ 05                                                                  5
Chaîne de création…
  Vue complète de la chaîne de compilation et de linkage :



                                       Fichier objet
                                             .o
                                                             Fichier objet (.o)
    Source
      .c
                                                             Exécutable
                    Compilation            Linkage           Librairie statique .a

                                                             dynamique .o / .so
   Include
      .h                         Librairie statique .
                                           a
                                       et / ou
                                  dynamique .o / .
                                          so
                   ETAPE N°1                             ETAPE N°2

28/ 02/ 05                                                                        6
Etape n°1                     En 6 étapes




             LA COMPILATION




28/ 02/ 05                                  7
Etape 1 : la com pilation                                            1/ 6


   Analyse (lexicale Lex (1)/ Flex (2) et grammaticale Yacc(1)/ Bison (2)) du code source
      pour obtenir une version ciblée à une plateforme matérielle donnée (sparc,
      rs6000, x86, powerpc …) :




              Fichier Source
                     .c
                                                                   Fichier objet
                                       Compilation                    compilé
                                                                         .o
              Fichier Include
                     .h

                                        (1)
                                              Outils issus des Unix commerciaux.
                                        (2)
                                              Version libre (GNU) de ces outils.




 28/ 02/ 05                                                                                 8
Etape 1 : la com pilation                                                          2/ 6


   Il s’agit d’une conversion de formats pouvant être représentée par la règle
        suivante :

                                             COMPILATEUR
                                               REGLE DE
                                                                                         .o
              .c et .h
                                             CONVERSION
              Fi ch i er d ’en t r ée                                   Fi ch i er d e sor t i e
                                        Analyse         Analyse
                                        l exi cal e   gr am m at i ca
                                                           le

     Cette étape appelée « compilation » permet d’associer à un langage donné
     (C, Pascal, Java … ) une mnémonique objet liée à une plateforme matérielle
     donnée.
     Ici comme dans la continuité de la chaîne, les ex tensions sont importantes
     pour le programme « m ak e » car elle permettent de définir le bon
     programme à utiliser.


 28/ 02/ 05                                                                                        9
Etape 1 : la com pilation                                            3/ 6


   Exemple de compilation d’un seul source en langage C (test.c) et de son fichier
      header implicite (test.h) pour obtenir un fichier objet test.o

   Chaîne d’appel au compilateur :

       # gcc -c -o test.o test.c

    Cette commande compile (- c) le source en langage C (.c) tout en générant en
      sortie un fichier objet (.o). L’ex tension de sortie est importante car dans le
      cas où elle est omise, le compilateur ajoutera la phase de linkage afin de
      générer un exécutable.

   De plus, dans le cas où les fichiers sources (.c) et/ ou les fichiers headers (.h)
      soient localisés dans un répertoire / sr c respectivement / i n cl u d e, différent
      du chemin courant, il est possible de préciser leur localisation au
      compilateur :

       # gcc -c -o test.o ./src/test.c –I./include




 28/ 02/ 05                                                                                 10
Etape 1 : la com pilation                                          4/ 6


   Exemple de compilation dite modulaire de plusieurs sources en langage C
      (test1 .c et test2 .c) et d’un fichier header (test.h) pour obtenir un fichier
      objet test.o

   Chaîne d’appel au compilateur :

       # gcc -o test.o test1.c test2.c

   A noter qu’il n’est pas possible d’utiliser le paramètre –c dans le cas d’une
      compilation modulaire (avec plusieurs fichiers sources).

   Nom des compilateurs par plate- forme :

              GNU Linux           gcc
              SUN OS/Solaris      gcc ou acc
              IBM Aix             gcc ou cc ou cc_r




 28/ 02/ 05                                                                            11
Etape 1 : la com pilation                                                 5/ 6


   Il est de même possible de rajouter quelques paramètres liés au débuggage :

   # gcc -c -Wall -O2 –g -o test.o ./src/test.c –I./include

       -Wall active tous les warning possibles

      -g produit des informations de débuggage, utiles avec gdb, ddd, workshop,
       total view, ….

      -01 Optimise du code lors de la phase de compilation (peut réduire la
       taille du code généré ainsi que le temps d’exécution).
      -02 Optimisation avancée du code.
      -Os active tous les types d’optimisation
      (Par défaut le compilateur n’optimise pas du tout le code)

   D’autres paramètres existent : -ggdb, -gstabs, etc …

   A noter le paramètre –ansi qui force l’analyseur lexical du compilateur à n’utiliser que la
       sémantique propre au langage c ansi ou tout autre langage ISO C90 ( C, fortran, etc
       …).


 28/ 02/ 05                                                                                      12
Etape 1 : la com pilation                                        6/ 6



   Dans certain cas il est parfois nécessaire de passer certains éléments au
      compilateur afin d’utiliser une compilation dite conditionnelle :

       Exemple de compilation conditionnelle (.c) :
              /* Code à inclure*/
              #define CONDITION
              printf(“affichage de ce texte …“);
              #endif

       Pour indiquer au compilateur qu’il doit inclure le printf dans le code source
       à compiler il faut passer à ce dernier le paramètre suivant :

              # gcc –c –o test.o –DCONDITION test.c




 28/ 02/ 05                                                                            13
Etape n°2                 En 3 étapes




             LE LINKAGE




28/ 02/ 05                              14
Etape 2 : le linkage                               1/ 2


   Représentation de la phase de mise à jour de la liste des symboles :


                                  Fichier objet
                                        .o

                                                      Ex écutable

                                                      Librairie statique .a
              Fichier compilé         Linkage
                                                      Librairie
                                                      Dynamique .a / .so

                            Librairie statique .
                                      a
                                  et / ou
                            dynamique .a / .so


 28/ 02/ 05                                                                   15
Etape 2 : le linkage                                  2/ 3


   Il s’agit là aussi d’une conversion de format d’un fichier objet (.o) en un fichier
        exécutable.

                                                                                  Executable
                                                                                          ou
                                         LINKAGE
                                                                                        Librairie
              .o
                                                                                        statique
                                         REGLE DE
                                                                                          ou
              Fi ch i er d ’en t r ée                        Fi ch i er d e sor t i e
                                        CONVERSION                                 Librairie
                                                                                  dynamique

    Cette étape appelée « linkage » rajoute au fichier objet une table de
    symboles décrivant les différentes entrées.
    Le programme utilisé habituellement pour réaliser cette conversion est « ld
    ». Certains compilateurs tels que « gcc ou cc » intègre aussi la fonction de
    linkage en natif.




 28/ 02/ 05                                                                                         16
Etape 2 : le linkage                                                    3/ 3

   Exemple : linkage d’un objet (.o) afin d’obtenir un exécutable :

       # gcc –c –o test test.o

   Commande identique à partir de plusieurs fichiers sources :

       # gcc –o test test1.o test2.o

   Nous pouvons remarquer que pour le linkage, les fichiers d’entrée sont des fichiers objets
      (.o).

   Combinaisons possibles d’un fichier source (.c) :

                                    (com pi l at i on & l i n k ag e)
       # gcc –c –o test test.c

   Pour information, sous le système GNU Linux le format par défaut est ELF et non a.out . La
       création d’un ex écutable au lieu d’un objet indique au linkeur d’ajouter le point
       d’entrée main.

   Editeurs de liens/ Linkeur par plate- forme :

                         GNU Linux                    gcc               ou ld
                         SUN OS/Solaris               gcc ou acc        ou ld
                         IBM Aix                      gcc ou cc ou cc_r ou ld


 28/ 02/ 05                                                                                     17
En 6 étapes




             LES LIBRAIRIES DYNAMIQUES




28/ 02/ 05                                       18
Les librairies dynam iques                                         1/ 7


   Définition :
                                                                   Programme
                                                                    exécutable
   Une librairie dynamique est une bibliothèque de fonctions qui sont
   chargées de façon dynamique. Plus précisément, ces librairies sont
   chargées au moment de leur utilisation et déchargées lorsque nous
   n’en n’avons plus besoin :
                                                                    Librairie
   Avantages :                                                     dynamique
       - taille des binaires et objets plus petits
       - chargé une seule fois même si utilisé par plusieurs programme.
       - permet de changer Dynamiquement de version de librairie

   Désavantages :

       - nécessite d’avoir la librairie dans le path.
       - se doit d’être linkée par ld ou gcc.




 28/ 02/ 05                                                                      19
Les librairies dynam iques                                                     2/ 7


   Création :

   La création revient à linker un ensemble de fichier objets en un seul afin de former une
       bibliothèque. Néanmoins, même si le principe de base reste le même, les paramètres à
       passer diffèrent d’une plateforme à une autre :

                GNU Linux            # gcc –c –shared –o test.so test.o
                SUN OS/Solaris       # ld –dY –G      –o test.so test.o
                IBM Aix              # ld –dY –G      –o test.o test.o

   D’autre part, même si sous SUN OS/ Solaris et IBM Aix, le linkeur utilisé de façon courante
       est ld, il est de plus de plus courant d’utiliser le compilateur même qui offre de nos
       jour cette double fonction de façon intrinsèque.

   Extension d’une librairie dynamique :

                GNU Linux                     .so
                Sun OS / Sun Solaris          .so
                IBM Aix                       .o
                MICROSOFT Windows             .dll




 28/ 02/ 05                                                                                      20
Les librairies dynam iques                                                    3/ 7


   Test de dépendances :

   Une fois compilé, il est possible de lister les dépendances d’un exécutable avec des
      librairies dynamiques (ainsi que leurs versions). Cela est utile pour permettre d’une
      part de savoir si un programme est compilé avec une librairie dynamique et d’autre
      part le nom de cette librairie.

              # /usr/bin/ldd test

       Ex emple de résultat :      # ldd test


              libanasm7.so => /home/tgayet/vittam2/lib.i386_linux/libanasm7.so
                               (0x40017000)
              libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
              /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

   Quand bien même, le programme n’utilise pas de librairie dynamique « utilisateur », nous
      pouvons remarquer qu’implicitement, ce dernier utilise des librairies dynamiques
      système comme celle de glibc : libc.so.6 (implémentation des fonctions génériques
      utilisable en langage C).




 28/ 02/ 05                                                                                   21
Les librairies dynam iques                                                                                               4/ 7


 D’autre part, cette librairie possède la                                    Une autre source d'information est :
 particularité de posséder un point
    d’entrée.
                                                                             # /usr/bin/gcc -v
 En effet, il est possible de l’ex écuter tel
 un programme : # /lib/libc.so.6
                                                                            Reading specs from / agl/ tools/ perl/ current/ bin/
     GNU C Library stable release version 2.3.2, by Roland McGrath et al.
                                                                            ../ lib/ gcc- lib/ i386- redhat- linux / 3.2.2/ specs
     Copyright (C) 2003 Free Software Foundation, Inc.
                                                                            Configured with: ../ configure - - prefix = / usr - - m andir= / usr/ share/ m an
     This is free software; see the source for copying conditions.           - - infodir= / usr/ share/ info
                                                                            - - enable- shared - - enable- threads= posix - - disable- checking
     There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
                                                                            - - with- system - zlib
     PARTICULAR PURPOSE.
                                                                            - - enable- __cx a_atex it - - host= i386- redhat- linux
     Compiled by GNU CC version 3.2.2 20030222 (Red Hat Linux 3.2.2- 5).
                                                                            Thread m odel: posix
     Compiled on a Linux 2.4.20 system on 2003- 11- 12.                     gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2- 5)
     Available extensions:
          GNU libio by Per Bothner
          crypt add- on version 2.1 by Michael Glad and others
          linuxthreads- 0.10 by Xavier Leroy
          The C stubs add- on version 2.1.2.
          BIND- 8.2.3- T5B
          NIS(YP)/ NIS+ NSS modules 0.19 by Thorsten Kukuk
          Glibc- 2.0 compatibilit y add- on by Cristian Gafton
          libthread_db work sponsored by Alpha Processor Inc
     Thread- local storage support included.
     Report bugs using the ` glibcbug' script to < bugs@gnu.org> .




 28/ 02/ 05                                                                                                                                      22
Les librairies dynam iques                                                              5/ 7

   PATH :

   Lors de l’exécution d’un programme nécessitant une librairie dynamique,il peut être
       parfois nécessaire de modifier le cache système lié aux librairies dynamiques. En effet,
       si cette dernière ne se trouve pas dans dans le répertoire courant du binaire, une
       erreur de chargement se produira. Pour résoudre ce problème de chemin, il existe
       deux solutions :

   1. Modifier la variable d’environnement LD_LIBRARY_PATH afin d’y ajouter le chemin
       souhaité :

              setenv LD_LIBRARY_PATH $ LD_LIBRARY_PATH:/ nouveau_chemin
       ou     ex port LD_LIBRARY_PATH= $ LD_LIBRARY_PATH:/ nouveau_chemin

       nb : sous IBM Aix , la variable se nomme : LIBPATH

   2. Réactualiser le cache lié aux librairies :

              Fichier de paramétrage du cache : /etc/ld.so.conf
                                                                                  (1)
                                                                                        En root
              Commande de régénération         : /sbin/ldconfig (1)

   Il est courant de voir le fichier ld.so.conf contenir les chemins suivants : / lib, / usr / lib
        (par f ois un alias), / usr / X11R6/ lib, / u sr / local/ lib, / usr / open w in/ lib, /
        opt / k de3/ lib, / opt / gn om e2/ lib …


 28/ 02/ 05                                                                                          23
Les librairies dynam iques                                                     6/ 7


   Exemple détaillé d’utilisation en langage C du chargement d’une librairie dynamique :
                                                        Exem ple de ch ar gem en t de la
   test.c                                                    f onct ion t est dans la Libr air ie
                                                             dyn am ique libtest.so
   #include <dlfcn.h>
   #include <stdlib.h>
                                                         Ouverture (handle) / Chargement
   #include <stdio.h>
                                                             de la librairie libtest.so
   Typedef void (*test_fonction)(void);
                                                            Recherche du pointeur de la
                                                               fonction fonction_test()
   int main(void)
   {                                                        Excution de la fonction
      void *module;
                                                            Fermeture de la librairie


                     = dlopen(quot;libtest“, RTLD_LAZY);
       module
       test_fonction = dlsyn(module, quot; fonction_test“);

       / * utilisation de la fonction ici */ A noter que le chargement est aujourd’hui
                                       Implicite et que ces étapes sont tranparentes.
                                       Les fonctions dlopen, dlsyn et dlclose sont
       dlclose();
                                       implémentés dans la glibc.
   }

 28/ 02/ 05                                                                                     24
Les librairies dynam iques                                                         7/ 7


   Linkage :

   Une librairie dynamique n’ est liée à un programme qu’ au moment du linkage :

               GNU Linux           # gcc -fPIC test.o –L./lib –ltest
               SUN OS/Solaris      # gcc -KPIC test.o –L./lib –ltest
               IBM Aix             # gcc       test.o –L./lib –ltest


       Nb : Le pr éf ixe lib est r aj out é aut om at iquem ent devant test pour former libtest.

       –fPIC définit que le bloc dynam ique qui sera chargé en mémoire pourra être placé à
       différente zone.

   Tout comme pour la phase de com pilation il est possible de préciser certains paramètres. En
       effet, lors du linkage il est parfois nécessaire d’ inclure des librairies statiques ou
       dynamiques. Le paramètre nécessaire pour ces faire est le suivant :
               -l./lib –L./lib/test

       Le paramètre –l demande à l’ éditeur de lien de rechercher dans le chemin ./ lib, à partir du
       chem in courant, une bibliothèque statique libtest.a ou bien part agée/ dynam ique libtest.so.
       L’ éditeur de liens parcourt tous les répertoires de bibliot hèques st andards (cf variable
       d’ environnement LD_LIBRARY_PATH) et tous les - L indiqués. Si le linkeur trouve à la fois une
       librairie statique et dynamique, il choisit de préférence la librairie dynamique sauf si le
       paramètre - static est passé aussi.



 28/ 02/ 05                                                                                         25
En 4 étapes




             LES LIBRAIRIES STATIQUES




28/ 02/ 05                                      26
Les librairies statiques                                          1/ 4


   Définition :

   Une librairie statique est comme la librairie dynamique, une      Programme
   bibliothèque de fonctions mais au lieu que le code soit           exécutable
   dissocié du programme et chargé au moment de son
   utilisation propre, ce dernier est compilé en dur.                    Librairie
                                                                         statique
   Avantages :

       - facile à gérer.
       - ne nécessite rien d’autre ; facilement diffusable.

   Désavantages :

       - Peut former des binaires de taille conséquente ;
         augmente donc la consommation de ressources, mais une fois alloué en RAM, aucun
       autre
         chargement n’est nécessaire.




 28/ 02/ 05                                                                                27
Les librairies statiques                                                                2/ 4


   Création :

   La création d’une librairie statique requiert l’utilisation du programme ar (com m an d e u n i f or m e q u el q u e
        soi t l a pl at ef or m e) :

        # /usr/bin/ar –rv test.a test1.o test2.o test3.o
        ou
        # /usr/bin/ar –rv test.a *.o

   Cela rassemble les 3 fichiers objets (test1.o, test2.o et test3.o) en une librairie statique (test.a).
        L’ex tension .a d’une librairie statique est constante quelque soir la plateforme Unix à l’ex ception de
        MS Windows. (.lib).

   Extension d’une librairie statique :

        GNU Linux                           .a
        Sun OS / Sun Solaris                .a
        IBM Aix                             .a
        MICROSOFT Windows                   .lib


   Il est possible de solliciter la recréation de cette table (utile pour SUN OS mais implicite sur les autres
         plateformes) :
                             (1).
        # ranlib test.a         (1)
                                      Implicite sur une majorité de plateforme sauf sous SUN OS.




 28/ 02/ 05                                                                                                                28
Les librairies statiques                                                                               3/ 4


   Test :

   Il est aussi possible de lister le contenu des fichiers objets inclus dans la librairie :

                                                                                               ad_server.o
       # /usr/bin/ar –t test.a                                                                 cominter.o
                                                                                               com_util.o
                                                                                               filoint er.o
                                                               Exemple de résultats :          miscell.o
                                                                                               paral.o
                                                                                               pilot.o
                                                                                               simul_api.o
                                                                                               spyinter.o
                                                                                               userint.o

   La commande suivante permet de lister cette table de symboles :

       # /usr/bin/nm             test.a                                                         ad_server.o:
                                                                                                00000099 T affichage_etat_client
                                                                                                00000004 C bDebugAd
                                                                                                00000004 C bDebugSu
                                                                                                     U bTrace
        Légende :                                                                               00000390 T close_socket
                                                                                                0000040f T close_tab_client
                                                                Exemple de résultats :          0000046d T connexion_client
        U : undefined (implémentation                                                           cominter.o:
                                                                                                     U atoi
        ex terne)                                                                               00000004 d bComInit
        T : implémenté à l’intérieur                                                            00000000 d bNoInitWarn
                                                                                                00000010 b bTrComInter
              « Pou r u n obj et , cel a l i st e l es f on ct i on s et pou r u n e l i br ai r i e
              l es f on ct i on s par obj et . »



 28/ 02/ 05                                                                                                                        29
Les librairies statiques                                                4/ 4


   Linkage :

   Le linkage d’un binaire avec une librairie statique permet d’ajouter les fonctions
        implémentées
   à l’intérieur de cette dernière. Au final, la table de symboles ainsi générée sera commune.

   Compilation d’un fichier source (test.c) avec la librairie statique libtest.a afin de générer le
      binaire (test) :

               GNU Linux           # gcc –c test.o libtest.a –o test
               SUN Solaris         # gcc –c test.o libtest.a –o test
               IBM Aix              # gcc –c test.o libtest.a –o test


                                                                    test
                                   test.o      Libtest.a


   Le linkage d’une librairie statique avec un binaire est identique au linkage d’un fichier
        objet.


 28/ 02/ 05                                                                                           30
Conclusion
  J’espère que ce document vous rendra service.

  Pour davantage d’aide sur les différentes commandes :

      # man commande

      # commande --help

      Les how to sur la compilation (glibc, gcc, gdb …).

      Les forums dédiés (Newsgroups).

      les sites dédiés.

      Et bien entendu Google.fr

      http://www.fortran-2000.org/ArnaudRecipes/sharedli.html
      http://www.nyangau.fsnet.co.uk/dll/dll.htm




28/ 02/ 05                                                      31
Making of…



      Diaporama réalisé à partir des deux projets open source suivant :



                                 OpenOffice.fr



                                     Gimp




28/ 02/ 05                                                                32
Fin




 28/ 02/ 05   33

Contenu connexe

En vedette

IMMOBILIER PRESTIGE APPARTEMENT PARIS TROCADERO VICTOR HUGO 3 CHAMBRES
IMMOBILIER PRESTIGE APPARTEMENT PARIS TROCADERO VICTOR HUGO 3 CHAMBRESIMMOBILIER PRESTIGE APPARTEMENT PARIS TROCADERO VICTOR HUGO 3 CHAMBRES
IMMOBILIER PRESTIGE APPARTEMENT PARIS TROCADERO VICTOR HUGO 3 CHAMBRESMarc Foujols
 
Campo semántico en francés: la nourriture
Campo semántico en francés: la nourritureCampo semántico en francés: la nourriture
Campo semántico en francés: la nourritureblancadn
 
Sebastian Carrillo Diario CAS
Sebastian Carrillo Diario CASSebastian Carrillo Diario CAS
Sebastian Carrillo Diario CASPaula Garcia
 
ACHAT APPARTEMENT PARIS 16 MUETTE
ACHAT APPARTEMENT PARIS 16 MUETTE ACHAT APPARTEMENT PARIS 16 MUETTE
ACHAT APPARTEMENT PARIS 16 MUETTE Marc Foujols
 
Presentation - motion-induced blindness aka mib - 2011
Presentation -  motion-induced blindness aka mib - 2011Presentation -  motion-induced blindness aka mib - 2011
Presentation - motion-induced blindness aka mib - 2011Franck Dernoncourt
 
Principes de navigation sur "Savoirs en partage"
Principes de navigation sur "Savoirs en partage"Principes de navigation sur "Savoirs en partage"
Principes de navigation sur "Savoirs en partage"Gilles d'Eggis
 
Module 1 - Formation des doctorants
Module 1 - Formation des doctorantsModule 1 - Formation des doctorants
Module 1 - Formation des doctorantsMagalie Le Gall
 
Remise Des Prix Olympiades De GéOsciences 19 Juin 2009
Remise Des Prix Olympiades De GéOsciences 19 Juin 2009Remise Des Prix Olympiades De GéOsciences 19 Juin 2009
Remise Des Prix Olympiades De GéOsciences 19 Juin 2009gawronski
 
Vente maison Lamorlaye
Vente maison LamorlayeVente maison Lamorlaye
Vente maison LamorlayeMarc Foujols
 
Equipier Chez Mac Do Zammit MéLanie
Equipier Chez Mac Do   Zammit MéLanieEquipier Chez Mac Do   Zammit MéLanie
Equipier Chez Mac Do Zammit MéLaniegawronski
 
Dossier prestige propriété Normandie
Dossier prestige propriété NormandieDossier prestige propriété Normandie
Dossier prestige propriété NormandieMarc Foujols
 
Point g mic.b-p
Point g mic.b-pPoint g mic.b-p
Point g mic.b-pcatavrio
 
Innovation et Développement Durable
Innovation et Développement DurableInnovation et Développement Durable
Innovation et Développement Durablesarah38
 
Bilan Immersion Fac De Nancy
Bilan  Immersion Fac De NancyBilan  Immersion Fac De Nancy
Bilan Immersion Fac De Nancygawronski
 

En vedette (20)

IMMOBILIER PRESTIGE APPARTEMENT PARIS TROCADERO VICTOR HUGO 3 CHAMBRES
IMMOBILIER PRESTIGE APPARTEMENT PARIS TROCADERO VICTOR HUGO 3 CHAMBRESIMMOBILIER PRESTIGE APPARTEMENT PARIS TROCADERO VICTOR HUGO 3 CHAMBRES
IMMOBILIER PRESTIGE APPARTEMENT PARIS TROCADERO VICTOR HUGO 3 CHAMBRES
 
Campo semántico en francés: la nourriture
Campo semántico en francés: la nourritureCampo semántico en francés: la nourriture
Campo semántico en francés: la nourriture
 
Sebastian Carrillo Diario CAS
Sebastian Carrillo Diario CASSebastian Carrillo Diario CAS
Sebastian Carrillo Diario CAS
 
Kakaka
KakakaKakaka
Kakaka
 
ACHAT APPARTEMENT PARIS 16 MUETTE
ACHAT APPARTEMENT PARIS 16 MUETTE ACHAT APPARTEMENT PARIS 16 MUETTE
ACHAT APPARTEMENT PARIS 16 MUETTE
 
Presentation - motion-induced blindness aka mib - 2011
Presentation -  motion-induced blindness aka mib - 2011Presentation -  motion-induced blindness aka mib - 2011
Presentation - motion-induced blindness aka mib - 2011
 
Principes de navigation sur "Savoirs en partage"
Principes de navigation sur "Savoirs en partage"Principes de navigation sur "Savoirs en partage"
Principes de navigation sur "Savoirs en partage"
 
Module 1 - Formation des doctorants
Module 1 - Formation des doctorantsModule 1 - Formation des doctorants
Module 1 - Formation des doctorants
 
Remise Des Prix Olympiades De GéOsciences 19 Juin 2009
Remise Des Prix Olympiades De GéOsciences 19 Juin 2009Remise Des Prix Olympiades De GéOsciences 19 Juin 2009
Remise Des Prix Olympiades De GéOsciences 19 Juin 2009
 
Vente maison Lamorlaye
Vente maison LamorlayeVente maison Lamorlaye
Vente maison Lamorlaye
 
NOD - News On Demand
NOD - News On DemandNOD - News On Demand
NOD - News On Demand
 
Comeback
ComebackComeback
Comeback
 
Equipier Chez Mac Do Zammit MéLanie
Equipier Chez Mac Do   Zammit MéLanieEquipier Chez Mac Do   Zammit MéLanie
Equipier Chez Mac Do Zammit MéLanie
 
EL USO DE LA TIC PARA LOS DOCENTES
EL USO DE LA TIC PARA  LOS DOCENTESEL USO DE LA TIC PARA  LOS DOCENTES
EL USO DE LA TIC PARA LOS DOCENTES
 
Dossier prestige propriété Normandie
Dossier prestige propriété NormandieDossier prestige propriété Normandie
Dossier prestige propriété Normandie
 
Maravillas de mi peru
Maravillas de mi peruMaravillas de mi peru
Maravillas de mi peru
 
Brochure anahita
Brochure anahitaBrochure anahita
Brochure anahita
 
Point g mic.b-p
Point g mic.b-pPoint g mic.b-p
Point g mic.b-p
 
Innovation et Développement Durable
Innovation et Développement DurableInnovation et Développement Durable
Innovation et Développement Durable
 
Bilan Immersion Fac De Nancy
Bilan  Immersion Fac De NancyBilan  Immersion Fac De Nancy
Bilan Immersion Fac De Nancy
 

Similaire à Rappels de développements sous GNU Linux

Programmation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxProgrammation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxOlyvierNzighou1
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versiongoldoraf
 
Programmation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxProgrammation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxOlyvierNzighou1
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redoThierry Gayet
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la rechercheJohan Moreau
 
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...Mathieu Saby
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdfAboubacarDiarra10
 
Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Sylvain Leroy
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzlesMicrosoft
 
COURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptxCOURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptxLuneSabsPericolo1
 
Algo vol.2 sujets
Algo vol.2   sujetsAlgo vol.2   sujets
Algo vol.2 sujetschrisdilane
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 

Similaire à Rappels de développements sous GNU Linux (20)

openFrameworks
openFrameworksopenFrameworks
openFrameworks
 
Cours langage-c
Cours langage-cCours langage-c
Cours langage-c
 
Langage C++
Langage C++Langage C++
Langage C++
 
Programmation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptxProgrammation-en-C-ESIITECH-2023-2024-bis.pptx
Programmation-en-C-ESIITECH-2023-2024-bis.pptx
 
Git ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de versionGit ou le renouveau du contrôle de version
Git ou le renouveau du contrôle de version
 
Programmation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptxProgrammation-en-C-ESIITECH-2023-2024.pptx
Programmation-en-C-ESIITECH-2023-2024.pptx
 
A la découverte de redo
A la découverte de redoA la découverte de redo
A la découverte de redo
 
Outils de construction pour la recherche
Outils de construction pour la rechercheOutils de construction pour la recherche
Outils de construction pour la recherche
 
SystemC
SystemCSystemC
SystemC
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Langage C
Langage CLangage C
Langage C
 
Microsoft07coursbaptiste
Microsoft07coursbaptisteMicrosoft07coursbaptiste
Microsoft07coursbaptiste
 
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
Découvrez OpenRefine: un outil gratuit pour nettoyer, préparer et enrichir vo...
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdf
 
Rappels Modularisation application C/C++
Rappels Modularisation application C/C++Rappels Modularisation application C/C++
Rappels Modularisation application C/C++
 
C# et .NET : Enigmes et puzzles
C# et .NET : Enigmes  et puzzlesC# et .NET : Enigmes  et puzzles
C# et .NET : Enigmes et puzzles
 
R Devtools
R DevtoolsR Devtools
R Devtools
 
COURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptxCOURS C++ [Enregistrement automatique]Complet (1).pptx
COURS C++ [Enregistrement automatique]Complet (1).pptx
 
Algo vol.2 sujets
Algo vol.2   sujetsAlgo vol.2   sujets
Algo vol.2 sujets
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 

Rappels de développements sous GNU Linux

  • 1. Rappels de développem ent REF. OSP001 GAYET Thierry Thier r y.Gayet @lapost e.n et
  • 2. Plan de la présentation Introduction Extensions de fichiers Chaîne de création Compilation Linkage Librairies dynamiques Librairie statique Conclusion Références 28/ 02/ 05 2
  • 3. Introduction A l 'ai d e d 'u n l an g ag e d on n é, il est p ossi b l e d e com p i ler l a r et r an scr ip t ion d 'u n al gor i t h m e, l u i - m êm e i ssu d 'u n e an alyse, af in d 'en ob t en i r u n b in air e, exécu t abl e ou n on , u ne l ibr ai r i e dynam i qu e ou b ien st at iq u e. Un e d escr ip t i on d e ces d i f f ér en t es t r an sf or m at i on s est d ét ai ll ée d an s ce d ocu m en t d e syn t h èse. Il t r ait e p r i n ci p al em en t d es p lat ef or m es SUN OS et Sol ar i s, IBM Ai x et b i en en t en d u GUN Li n u x (t ou t es d i st r i b u t i ons). 28/ 02/ 05 3
  • 4. Ex tensions 1/ 2 .c Source en langage C nécessitant un pré- processing .i Source en langage C ne nécessitant pas de pré- processing .cc .cp .cxx .cpp/ Source en langage C+ + nécessitant un pré- processing .c+ + .C .ii Source en langage C+ + ne nécessitant pas de pré- processing .h Fichier header ne devant pas être compilé ou linké !!!! 28/ 02/ 05 4
  • 5. Ex tensions 2/ 2 .s Source en langage assembleur nécessitant un pré- processing. .S Source en langage assembleur ne nécessitant pas de pré- processing. .o Fichier objet en langage machine. .a Librairie statique (et dynamique sous IBM Aix ). .so Librairie dynamique (GNU Linux et SUN Solaris). 28/ 02/ 05 5
  • 6. Chaîne de création… Vue complète de la chaîne de compilation et de linkage : Fichier objet .o Fichier objet (.o) Source .c Exécutable Compilation Linkage Librairie statique .a dynamique .o / .so Include .h Librairie statique . a et / ou dynamique .o / . so ETAPE N°1 ETAPE N°2 28/ 02/ 05 6
  • 7. Etape n°1 En 6 étapes LA COMPILATION 28/ 02/ 05 7
  • 8. Etape 1 : la com pilation 1/ 6 Analyse (lexicale Lex (1)/ Flex (2) et grammaticale Yacc(1)/ Bison (2)) du code source pour obtenir une version ciblée à une plateforme matérielle donnée (sparc, rs6000, x86, powerpc …) : Fichier Source .c Fichier objet Compilation compilé .o Fichier Include .h (1) Outils issus des Unix commerciaux. (2) Version libre (GNU) de ces outils. 28/ 02/ 05 8
  • 9. Etape 1 : la com pilation 2/ 6 Il s’agit d’une conversion de formats pouvant être représentée par la règle suivante : COMPILATEUR REGLE DE .o .c et .h CONVERSION Fi ch i er d ’en t r ée Fi ch i er d e sor t i e Analyse Analyse l exi cal e gr am m at i ca le Cette étape appelée « compilation » permet d’associer à un langage donné (C, Pascal, Java … ) une mnémonique objet liée à une plateforme matérielle donnée. Ici comme dans la continuité de la chaîne, les ex tensions sont importantes pour le programme « m ak e » car elle permettent de définir le bon programme à utiliser. 28/ 02/ 05 9
  • 10. Etape 1 : la com pilation 3/ 6 Exemple de compilation d’un seul source en langage C (test.c) et de son fichier header implicite (test.h) pour obtenir un fichier objet test.o Chaîne d’appel au compilateur : # gcc -c -o test.o test.c Cette commande compile (- c) le source en langage C (.c) tout en générant en sortie un fichier objet (.o). L’ex tension de sortie est importante car dans le cas où elle est omise, le compilateur ajoutera la phase de linkage afin de générer un exécutable. De plus, dans le cas où les fichiers sources (.c) et/ ou les fichiers headers (.h) soient localisés dans un répertoire / sr c respectivement / i n cl u d e, différent du chemin courant, il est possible de préciser leur localisation au compilateur : # gcc -c -o test.o ./src/test.c –I./include 28/ 02/ 05 10
  • 11. Etape 1 : la com pilation 4/ 6 Exemple de compilation dite modulaire de plusieurs sources en langage C (test1 .c et test2 .c) et d’un fichier header (test.h) pour obtenir un fichier objet test.o Chaîne d’appel au compilateur : # gcc -o test.o test1.c test2.c A noter qu’il n’est pas possible d’utiliser le paramètre –c dans le cas d’une compilation modulaire (avec plusieurs fichiers sources). Nom des compilateurs par plate- forme : GNU Linux gcc SUN OS/Solaris gcc ou acc IBM Aix gcc ou cc ou cc_r 28/ 02/ 05 11
  • 12. Etape 1 : la com pilation 5/ 6 Il est de même possible de rajouter quelques paramètres liés au débuggage : # gcc -c -Wall -O2 –g -o test.o ./src/test.c –I./include -Wall active tous les warning possibles -g produit des informations de débuggage, utiles avec gdb, ddd, workshop, total view, …. -01 Optimise du code lors de la phase de compilation (peut réduire la taille du code généré ainsi que le temps d’exécution). -02 Optimisation avancée du code. -Os active tous les types d’optimisation (Par défaut le compilateur n’optimise pas du tout le code) D’autres paramètres existent : -ggdb, -gstabs, etc … A noter le paramètre –ansi qui force l’analyseur lexical du compilateur à n’utiliser que la sémantique propre au langage c ansi ou tout autre langage ISO C90 ( C, fortran, etc …). 28/ 02/ 05 12
  • 13. Etape 1 : la com pilation 6/ 6 Dans certain cas il est parfois nécessaire de passer certains éléments au compilateur afin d’utiliser une compilation dite conditionnelle : Exemple de compilation conditionnelle (.c) : /* Code à inclure*/ #define CONDITION printf(“affichage de ce texte …“); #endif Pour indiquer au compilateur qu’il doit inclure le printf dans le code source à compiler il faut passer à ce dernier le paramètre suivant : # gcc –c –o test.o –DCONDITION test.c 28/ 02/ 05 13
  • 14. Etape n°2 En 3 étapes LE LINKAGE 28/ 02/ 05 14
  • 15. Etape 2 : le linkage 1/ 2 Représentation de la phase de mise à jour de la liste des symboles : Fichier objet .o Ex écutable Librairie statique .a Fichier compilé Linkage Librairie Dynamique .a / .so Librairie statique . a et / ou dynamique .a / .so 28/ 02/ 05 15
  • 16. Etape 2 : le linkage 2/ 3 Il s’agit là aussi d’une conversion de format d’un fichier objet (.o) en un fichier exécutable. Executable ou LINKAGE Librairie .o statique REGLE DE ou Fi ch i er d ’en t r ée Fi ch i er d e sor t i e CONVERSION Librairie dynamique Cette étape appelée « linkage » rajoute au fichier objet une table de symboles décrivant les différentes entrées. Le programme utilisé habituellement pour réaliser cette conversion est « ld ». Certains compilateurs tels que « gcc ou cc » intègre aussi la fonction de linkage en natif. 28/ 02/ 05 16
  • 17. Etape 2 : le linkage 3/ 3 Exemple : linkage d’un objet (.o) afin d’obtenir un exécutable : # gcc –c –o test test.o Commande identique à partir de plusieurs fichiers sources : # gcc –o test test1.o test2.o Nous pouvons remarquer que pour le linkage, les fichiers d’entrée sont des fichiers objets (.o). Combinaisons possibles d’un fichier source (.c) : (com pi l at i on & l i n k ag e) # gcc –c –o test test.c Pour information, sous le système GNU Linux le format par défaut est ELF et non a.out . La création d’un ex écutable au lieu d’un objet indique au linkeur d’ajouter le point d’entrée main. Editeurs de liens/ Linkeur par plate- forme : GNU Linux gcc ou ld SUN OS/Solaris gcc ou acc ou ld IBM Aix gcc ou cc ou cc_r ou ld 28/ 02/ 05 17
  • 18. En 6 étapes LES LIBRAIRIES DYNAMIQUES 28/ 02/ 05 18
  • 19. Les librairies dynam iques 1/ 7 Définition : Programme exécutable Une librairie dynamique est une bibliothèque de fonctions qui sont chargées de façon dynamique. Plus précisément, ces librairies sont chargées au moment de leur utilisation et déchargées lorsque nous n’en n’avons plus besoin : Librairie Avantages : dynamique - taille des binaires et objets plus petits - chargé une seule fois même si utilisé par plusieurs programme. - permet de changer Dynamiquement de version de librairie Désavantages : - nécessite d’avoir la librairie dans le path. - se doit d’être linkée par ld ou gcc. 28/ 02/ 05 19
  • 20. Les librairies dynam iques 2/ 7 Création : La création revient à linker un ensemble de fichier objets en un seul afin de former une bibliothèque. Néanmoins, même si le principe de base reste le même, les paramètres à passer diffèrent d’une plateforme à une autre : GNU Linux # gcc –c –shared –o test.so test.o SUN OS/Solaris # ld –dY –G –o test.so test.o IBM Aix # ld –dY –G –o test.o test.o D’autre part, même si sous SUN OS/ Solaris et IBM Aix, le linkeur utilisé de façon courante est ld, il est de plus de plus courant d’utiliser le compilateur même qui offre de nos jour cette double fonction de façon intrinsèque. Extension d’une librairie dynamique : GNU Linux .so Sun OS / Sun Solaris .so IBM Aix .o MICROSOFT Windows .dll 28/ 02/ 05 20
  • 21. Les librairies dynam iques 3/ 7 Test de dépendances : Une fois compilé, il est possible de lister les dépendances d’un exécutable avec des librairies dynamiques (ainsi que leurs versions). Cela est utile pour permettre d’une part de savoir si un programme est compilé avec une librairie dynamique et d’autre part le nom de cette librairie. # /usr/bin/ldd test Ex emple de résultat : # ldd test libanasm7.so => /home/tgayet/vittam2/lib.i386_linux/libanasm7.so (0x40017000) libc.so.6 => /lib/tls/libc.so.6 (0x42000000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) Quand bien même, le programme n’utilise pas de librairie dynamique « utilisateur », nous pouvons remarquer qu’implicitement, ce dernier utilise des librairies dynamiques système comme celle de glibc : libc.so.6 (implémentation des fonctions génériques utilisable en langage C). 28/ 02/ 05 21
  • 22. Les librairies dynam iques 4/ 7 D’autre part, cette librairie possède la Une autre source d'information est : particularité de posséder un point d’entrée. # /usr/bin/gcc -v En effet, il est possible de l’ex écuter tel un programme : # /lib/libc.so.6 Reading specs from / agl/ tools/ perl/ current/ bin/ GNU C Library stable release version 2.3.2, by Roland McGrath et al. ../ lib/ gcc- lib/ i386- redhat- linux / 3.2.2/ specs Copyright (C) 2003 Free Software Foundation, Inc. Configured with: ../ configure - - prefix = / usr - - m andir= / usr/ share/ m an This is free software; see the source for copying conditions. - - infodir= / usr/ share/ info - - enable- shared - - enable- threads= posix - - disable- checking There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A - - with- system - zlib PARTICULAR PURPOSE. - - enable- __cx a_atex it - - host= i386- redhat- linux Compiled by GNU CC version 3.2.2 20030222 (Red Hat Linux 3.2.2- 5). Thread m odel: posix Compiled on a Linux 2.4.20 system on 2003- 11- 12. gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2- 5) Available extensions: GNU libio by Per Bothner crypt add- on version 2.1 by Michael Glad and others linuxthreads- 0.10 by Xavier Leroy The C stubs add- on version 2.1.2. BIND- 8.2.3- T5B NIS(YP)/ NIS+ NSS modules 0.19 by Thorsten Kukuk Glibc- 2.0 compatibilit y add- on by Cristian Gafton libthread_db work sponsored by Alpha Processor Inc Thread- local storage support included. Report bugs using the ` glibcbug' script to < bugs@gnu.org> . 28/ 02/ 05 22
  • 23. Les librairies dynam iques 5/ 7 PATH : Lors de l’exécution d’un programme nécessitant une librairie dynamique,il peut être parfois nécessaire de modifier le cache système lié aux librairies dynamiques. En effet, si cette dernière ne se trouve pas dans dans le répertoire courant du binaire, une erreur de chargement se produira. Pour résoudre ce problème de chemin, il existe deux solutions : 1. Modifier la variable d’environnement LD_LIBRARY_PATH afin d’y ajouter le chemin souhaité : setenv LD_LIBRARY_PATH $ LD_LIBRARY_PATH:/ nouveau_chemin ou ex port LD_LIBRARY_PATH= $ LD_LIBRARY_PATH:/ nouveau_chemin nb : sous IBM Aix , la variable se nomme : LIBPATH 2. Réactualiser le cache lié aux librairies : Fichier de paramétrage du cache : /etc/ld.so.conf (1) En root Commande de régénération : /sbin/ldconfig (1) Il est courant de voir le fichier ld.so.conf contenir les chemins suivants : / lib, / usr / lib (par f ois un alias), / usr / X11R6/ lib, / u sr / local/ lib, / usr / open w in/ lib, / opt / k de3/ lib, / opt / gn om e2/ lib … 28/ 02/ 05 23
  • 24. Les librairies dynam iques 6/ 7 Exemple détaillé d’utilisation en langage C du chargement d’une librairie dynamique : Exem ple de ch ar gem en t de la test.c f onct ion t est dans la Libr air ie dyn am ique libtest.so #include <dlfcn.h> #include <stdlib.h> Ouverture (handle) / Chargement #include <stdio.h> de la librairie libtest.so Typedef void (*test_fonction)(void); Recherche du pointeur de la fonction fonction_test() int main(void) { Excution de la fonction void *module; Fermeture de la librairie = dlopen(quot;libtest“, RTLD_LAZY); module test_fonction = dlsyn(module, quot; fonction_test“); / * utilisation de la fonction ici */ A noter que le chargement est aujourd’hui Implicite et que ces étapes sont tranparentes. Les fonctions dlopen, dlsyn et dlclose sont dlclose(); implémentés dans la glibc. } 28/ 02/ 05 24
  • 25. Les librairies dynam iques 7/ 7 Linkage : Une librairie dynamique n’ est liée à un programme qu’ au moment du linkage : GNU Linux # gcc -fPIC test.o –L./lib –ltest SUN OS/Solaris # gcc -KPIC test.o –L./lib –ltest IBM Aix # gcc test.o –L./lib –ltest Nb : Le pr éf ixe lib est r aj out é aut om at iquem ent devant test pour former libtest. –fPIC définit que le bloc dynam ique qui sera chargé en mémoire pourra être placé à différente zone. Tout comme pour la phase de com pilation il est possible de préciser certains paramètres. En effet, lors du linkage il est parfois nécessaire d’ inclure des librairies statiques ou dynamiques. Le paramètre nécessaire pour ces faire est le suivant : -l./lib –L./lib/test Le paramètre –l demande à l’ éditeur de lien de rechercher dans le chemin ./ lib, à partir du chem in courant, une bibliothèque statique libtest.a ou bien part agée/ dynam ique libtest.so. L’ éditeur de liens parcourt tous les répertoires de bibliot hèques st andards (cf variable d’ environnement LD_LIBRARY_PATH) et tous les - L indiqués. Si le linkeur trouve à la fois une librairie statique et dynamique, il choisit de préférence la librairie dynamique sauf si le paramètre - static est passé aussi. 28/ 02/ 05 25
  • 26. En 4 étapes LES LIBRAIRIES STATIQUES 28/ 02/ 05 26
  • 27. Les librairies statiques 1/ 4 Définition : Une librairie statique est comme la librairie dynamique, une Programme bibliothèque de fonctions mais au lieu que le code soit exécutable dissocié du programme et chargé au moment de son utilisation propre, ce dernier est compilé en dur. Librairie statique Avantages : - facile à gérer. - ne nécessite rien d’autre ; facilement diffusable. Désavantages : - Peut former des binaires de taille conséquente ; augmente donc la consommation de ressources, mais une fois alloué en RAM, aucun autre chargement n’est nécessaire. 28/ 02/ 05 27
  • 28. Les librairies statiques 2/ 4 Création : La création d’une librairie statique requiert l’utilisation du programme ar (com m an d e u n i f or m e q u el q u e soi t l a pl at ef or m e) : # /usr/bin/ar –rv test.a test1.o test2.o test3.o ou # /usr/bin/ar –rv test.a *.o Cela rassemble les 3 fichiers objets (test1.o, test2.o et test3.o) en une librairie statique (test.a). L’ex tension .a d’une librairie statique est constante quelque soir la plateforme Unix à l’ex ception de MS Windows. (.lib). Extension d’une librairie statique : GNU Linux .a Sun OS / Sun Solaris .a IBM Aix .a MICROSOFT Windows .lib Il est possible de solliciter la recréation de cette table (utile pour SUN OS mais implicite sur les autres plateformes) : (1). # ranlib test.a (1) Implicite sur une majorité de plateforme sauf sous SUN OS. 28/ 02/ 05 28
  • 29. Les librairies statiques 3/ 4 Test : Il est aussi possible de lister le contenu des fichiers objets inclus dans la librairie : ad_server.o # /usr/bin/ar –t test.a cominter.o com_util.o filoint er.o Exemple de résultats : miscell.o paral.o pilot.o simul_api.o spyinter.o userint.o La commande suivante permet de lister cette table de symboles : # /usr/bin/nm test.a ad_server.o: 00000099 T affichage_etat_client 00000004 C bDebugAd 00000004 C bDebugSu U bTrace Légende : 00000390 T close_socket 0000040f T close_tab_client Exemple de résultats : 0000046d T connexion_client U : undefined (implémentation cominter.o: U atoi ex terne) 00000004 d bComInit T : implémenté à l’intérieur 00000000 d bNoInitWarn 00000010 b bTrComInter « Pou r u n obj et , cel a l i st e l es f on ct i on s et pou r u n e l i br ai r i e l es f on ct i on s par obj et . » 28/ 02/ 05 29
  • 30. Les librairies statiques 4/ 4 Linkage : Le linkage d’un binaire avec une librairie statique permet d’ajouter les fonctions implémentées à l’intérieur de cette dernière. Au final, la table de symboles ainsi générée sera commune. Compilation d’un fichier source (test.c) avec la librairie statique libtest.a afin de générer le binaire (test) : GNU Linux # gcc –c test.o libtest.a –o test SUN Solaris # gcc –c test.o libtest.a –o test IBM Aix # gcc –c test.o libtest.a –o test test test.o Libtest.a Le linkage d’une librairie statique avec un binaire est identique au linkage d’un fichier objet. 28/ 02/ 05 30
  • 31. Conclusion J’espère que ce document vous rendra service. Pour davantage d’aide sur les différentes commandes : # man commande # commande --help Les how to sur la compilation (glibc, gcc, gdb …). Les forums dédiés (Newsgroups). les sites dédiés. Et bien entendu Google.fr http://www.fortran-2000.org/ArnaudRecipes/sharedli.html http://www.nyangau.fsnet.co.uk/dll/dll.htm 28/ 02/ 05 31
  • 32. Making of… Diaporama réalisé à partir des deux projets open source suivant : OpenOffice.fr Gimp 28/ 02/ 05 32
  • 33. Fin 28/ 02/ 05 33