Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fichiers .so sous Linux

Equivalent au .dll et au .a ?

Sujet résolu
    16 juin 2008 à 19:21:59

    Bonjour,
    Cela fait un certain temps que j'utilise Ubuntu et je voudrais dissiper un doute : J'ai l'impréssion que sous Linux, les fichiers .so sont l'équivalent des fichiers .a (lib) ET des fichiers .dll sous Windows.
    En même temps, c'est logique : les .a et les .dll de Windows ont le même role.
    Qu'en est-il réélement ?
    • Partager sur Facebook
    • Partager sur Twitter
      16 juin 2008 à 19:28:09

      Meuh non :
      .a : bibliothèque statique, ce n'est en fait qu'une compression de fichiers .o (Linux ou Windows, c'est pareil)
      .so (Shared Object) : bibliothèque chargée dynamiquement
      Grilled
      • Partager sur Facebook
      • Partager sur Twitter
        16 juin 2008 à 19:41:11

        Pourtant, il n'y a aucun fichier *.a chez moi.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          16 juin 2008 à 21:14:37

          Sous GNU/Linux, les .so sont privilégiées au lib statiques.
          • Partager sur Facebook
          • Partager sur Twitter
            16 juin 2008 à 21:27:38

            Et donc, même si on peut trouver des libs statics .a sous Linux, c'est extrémnent rare. Si bien qu'on ne trouve que des fichiers de libs dynamique, c'est à dire des fichiers .so.

            Mais pourtant, sous windows, même avec des libs dynamique, il faut demander au compilateur d'alller chercher des fichiers .a (voir le cours de m@teo21)...
            • Partager sur Facebook
            • Partager sur Twitter
              16 juin 2008 à 21:48:50

              Fais un ls *.a dans ton /usr/lib.
              • Partager sur Facebook
              • Partager sur Twitter
                16 juin 2008 à 21:52:15

                Cela fait peu par rapport au .so, mais c'est vrai qu'il y en a.
                Merci.
                • Partager sur Facebook
                • Partager sur Twitter
                  16 juin 2008 à 21:58:09

                  Moi j'ai 258 .a et 375 .so
                  Enfin, les .a ne servent que pour compiler (nom du paquet : *-dev) alors que les utilisateurs en général (plutôt faux sous GNU/Linux) ne compilent pas (ils se contentent d'exécuter des programmes).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 juin 2008 à 22:00:07

                    C'est vrai qu'a part les lib C++ de base (qui ne nécéssite pas de .a il me semble) et wxWidgets, je n'ai pas grand chose.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 juin 2008 à 9:02:40

                      un .a est soit une lib static, soit l'interface de la lib dynamic
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 juin 2008 à 11:25:48

                        Sous Linux on peut très bien faire -lmon.so pour lier au so lors de la compilation.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 juin 2008 à 11:27:02

                          Donc, en fait, les .a ne sont pas obligatoir (sous linux) ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 juin 2008 à 13:51:31

                            Sous linux les .a sont des bibliothèques statiques, c'est tout.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 juin 2008 à 14:09:35

                              Ok, c'est bien ce que je me disais, sous linux, on a pas besoin de .a pour utiliser une lib dynamique.
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                20 juin 2008 à 15:04:51

                                Pole a déjà dit une partie, mais je répète et j'en rajoute :

                                Un .a est une archive, il est englobé dans l'exécutable à la compilation, il en fait désormais partie (executable = fichiers.o + fichiers.a) : après la compilation, tu n'as plus besoin des .a.

                                Un .so est linké (avec l'option -shared sur gcc), il y a deux utilisations possibles :
                                - chargé à la compilation : on met les fichiers .so sur la ligne de commande du linker, à titre indicatif : il regarde dedans pour résoudre les références manquantes, mais le .so n'est pas mis dans l'executable, les fonctions sont chargées à l'execution donc la présence du .so y est INDISPENSABLE.
                                - chargé à l'execution grâce aux dlfcn (dlopen + dlsym + dlclose)

                                En résumé : avec les .a, on génère des symboles inclus dans l'éxécutale ; avec les .so, on génère des dépendances à ces .so.

                                Il y a une bonne doc là dessus sur yolinux.com
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  20 juin 2008 à 15:10:09

                                  Ok, merci.
                                  De toute façon, les fichiers .a contiennent des .o, donc on pourrait même dire executable = uniquement fichiers.o.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Fichiers .so sous Linux

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown