Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les headers

Anonyme
    4 avril 2006 à 17:58:29

    Bonjour,
    voilà, il y a une question que je me pose depuis longtemps: les headers de la librairie standard (stdlib, stdio, string.h etc...), ils fonctionnent comment?! parce qu'il y a bien les .h, mais impossible de trouver les .c! comment ça fonctionne alors? (ça doit être pratique pour créer sa propre librairie... meuh non je rigole! :p )
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      4 avril 2006 à 21:12:38

      [e:]Hum non en fait. Désolé. [\e]

      ++.
      • Partager sur Facebook
      • Partager sur Twitter
        4 avril 2006 à 21:17:09

        Tout dépend de l'implémentation (de l'environnement tout entier, compilateur, système, etc.). Ca pourrait très bien être magique, le compilateur connaissant tout et se suffisant à lui-même, ou alors il pourrait faire appel à des libc externes, dynamiques, statiques, diverses, 'fin bref, il n'y a rien d'obligatoire.
        • Partager sur Facebook
        • Partager sur Twitter
          4 avril 2006 à 21:19:28

          Citation : Ze moi

          voilà, il y a une question que je me pose depuis longtemps: les headers de la librairie standard (stdlib, stdio, string.h etc...), ils fonctionnent comment?! parce qu'il y a bien les .h, mais impossible de trouver les .c!


          C'est tout l'intérêt d'une bibliothèque. Le code est précompilé et archivé dans un .lib ou un .a (ou l'équivallent en 'partagé' : .dll ou .so).

          Comme tu l'as lu sur le cours de M@téo, les .h ne sont que des interfaces.

          On a pas besoin des .c, sauf si on voulait modifier ou augmenter la bibliothèque.

          Dans un gros développement, on fait des dizaines de bibliothèques dont on assemble les morceaux pour constituer une application. Ca permet de répartir le travail, de tester individuellement chaque bout sans avoir à tout recompiler à chaque fois etc.

          http://mapage.noos.fr/emdel/notes.htm#bibliotheque
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !
          Anonyme
            4 avril 2006 à 21:19:43

            Il n'y a pas de .c :p

            Tu connais les fichiers .o ? Ce sont des fichiers dont le code est compilé, mais il manque les adresses des fonctions, il y a comme des "trous" dans le code où est écrit en clair le nom d'une fonction, et au linkage il faudra le remplacer par son adresse, pour y sauter directement.

            Dans le dossier /lib tu trouves des .a qui sont des ensembles de .o, ça correspond donc à plusieurs fichiers .c des fonctons standards, qui ont été compilés en .o et rassemblés dans un .a. Quand tu compiles, le compilateur sort d'abord un .o de ton fichier .c, puis le linker recherche les fonctions dans ton .o et les .a des libs, pour sortir le fichier exécutable final.

            Donc en fait, tu ne trouves pas de .c mais un format "à moitié" compilé : il continet les fonctions compilées mais il faut encore lier pour les appeller correctement dans un fichier exécutable ;)

            edit : je précise tout ça se passe avec GCC sous Windows ou Linux, comme l'a dit rz0 ça pourrait très bien être complètement différent :p
            • Partager sur Facebook
            • Partager sur Twitter
              4 avril 2006 à 21:39:32

              M@téo en parle dans le chapitre sur la programmation modulaire.

              Sinon je vais dire une connerie mais, en désactivant le linker, on obtiendrait donc des .o non ? On pourrait donc créer son propre fichier d'en-tête... :p

              * sort en courant *
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                4 avril 2006 à 21:56:00

                Citation : mleg

                Sinon je vais dire une connerie


                ... :D (voir suite)

                Citation : mleg

                mais, en désactivant le linker, on obtiendrait donc des .o non ?</taille>


                Oui.

                Citation : mleg

                On pourrait donc créer son propre fichier d'en-tête... :p


                Mais, on le peut déjà, tu sais comment créer un fichier d'en tête :D en fait il "suffit" de créer au moins un .c contenant des fonctions (sans main), le compiler (sans linker, sinon ça plante puisqu'il n'y a pas de main :p ), garder le .o. Eventuellement on rassemble les .o dans une librairie. Ensuite, on inclut le header, on programme le main et on appelle les fonctions du .h, on compile et on linke avec les .o ou .a déja faits. Ayé, un .exe :D
                • Partager sur Facebook
                • Partager sur Twitter
                  4 avril 2006 à 22:05:17

                  Mais c'est magnifique. :D

                  Merci. :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 avril 2006 à 9:36:50

                    M@teo, l'a dit dans le cour de C ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    ~( ・   ω   ・)~
                    Anonyme
                      5 avril 2006 à 14:21:55

                      Merci à vous, j'ai compris! (ha ba oui c'est expliqué mais bon ça faisait longtemps... enfin bon c'est pas expliqué explicitement comme ça...)
                      Edit: hé mais.... alors... comme je ne rajoute pas des options de linkages, yen a qui se font automatiquement?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        5 avril 2006 à 14:35:07

                        Oui, par défaut, quelques trucs sont linkées selon le compilo ; en général c'est la libc et parfois la libm (pour les maths) et en C++ la libstdc++.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          5 avril 2006 à 14:44:54

                          Ok merci à tous!
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            7 avril 2006 à 17:05:45

                            Au fait, j'ai encore une question (désolé, j'avais oublié de la poser): pour les dlls, c'est pareil que pour les .a?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              7 avril 2006 à 17:26:09

                              Les .a sont des bibliothèques statiques
                              Les .dll sont des bibliothèques dynamiques

                              Concrètement ça veut dire que si tu utilises des .a ils seront inclus dans ton exécutable, tandis que si tu utilises des .dll non.

                              Avantage des .a : pas besoin de fournir autre chose que l'exe (mais exe plus gros)
                              Avantage des .dll : exe plus petit (et plus facilement modulable en plugins) mais il faut fournir la DLL en plus de l'exe.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              If you'd like to join us, read "How do we work at OpenClassrooms"! :)

                              Anonyme
                                7 avril 2006 à 18:23:15

                                Ok merci
                                Sinon on les fait comment les DLLs avec gcc? j'ai beau chercher je ne trouve pas. On part des .o? des .c?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  7 avril 2006 à 18:38:18

                                  Citation : Ze moi

                                  Ok merci
                                  Sinon on les fait comment les DLLs avec gcc? j'ai beau chercher je ne trouve pas. On part des .o? des .c?


                                  Une DLL doit être écrite selon des critères définis par Microsoft. C'est une spécificité de Windows. Il y a un squelette type à réspecter, un fichier de ressources pour définir les fonctions exportées etc. C'est assez complexe. Ensuite, il faut utiliser l'éditeur de liens d'une certaine façon...

                                  Codage : MSDN est ton ami... Il existe aussi des forums spécialisés. http://www.developpez.net/forums/viewforum.php?f=4

                                  Génération : Mingw (Code::Blocks, par exemple) sait produire des DLL...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Music only !
                                  Anonyme
                                    7 avril 2006 à 22:03:15

                                    Citation : -ed-


                                    Génération : Mingw (Code::Blocks, par exemple) sait produire des DLL...


                                    Dev-Cpp sait aussi produire des Dll .Il suffit de cocher generer une Dll dans le choix du type de projet.(Il sait aussi genere des librairies statique en .a) pour ce que cela interesse.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      8 avril 2006 à 15:36:52

                                      Merci à tous! je vais me renseigner (c'est quoi msdn?!)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        8 avril 2006 à 15:43:03

                                        Citation : Ze moi

                                        Merci à tous! je vais me renseigner (c'est quoi msdn?!)


                                        La bas de documentation de Microsoft.

                                        http://msdn1.microsoft.com/fr-fr/default.aspx

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Music only !
                                        Anonyme
                                          8 avril 2006 à 15:49:21

                                          Heu.. j'ai cherché sur développez.com, mais je ne trouve rien...
                                          Et sur msdn ils ne parlent que VC++
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            8 avril 2006 à 16:02:13

                                            Citation : Ze moi

                                            Heu.. j'ai cherché sur développez.com, mais je ne trouve rien...


                                            Je t'ai renvoyé à un forum. A toi de poser une question là bas...

                                            Citation : Ze moi


                                            Et sur msdn ils ne parlent que VC++

                                            Non. Toute la technologie de développement de Windows y est documentée. Ca va beaucoup plus loin que VC++. Il y a des articles sur les DLL. Il faut fouiller, rechercher...
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Music only !
                                            Anonyme
                                              8 avril 2006 à 16:03:06

                                              Bon ok je vais continuer à chercher alors...
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                8 avril 2006 à 16:03:26

                                                Si j'ai bien compris, les .so sont l'équivalent des .dll, mais sous linux.

                                                1ere question : Comment créer un .so ec gcc?
                                                2eme question : Comment utiliser les .so?

                                                Merci d'avance =)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  8 avril 2006 à 16:06:58

                                                  Citation : Ze moi

                                                  Et sur msdn ils ne parlent que VC++



                                                  :lol: tu voudrais pas qu'ils parlent de GCC quand même?

                                                  et pour compiler une DLL ya une option gcc mais je sais plus laquelle :euh:
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    8 avril 2006 à 16:19:09

                                                    Bon voilà... je PENSE avoir compris: j'ai plusieurs fichiers:
                                                    z.c
                                                    #include <stdio.h>
                                                    #include <stdlib.h>

                                                    void hello(void)
                                                    {
                                                        printf("Hello!");
                                                        getchar();
                                                    }


                                                    z.def
                                                    EXPORTS
                                                    hello


                                                    ensuite je donne à manger à gcc:
                                                    gcc -shared -o z.dll z.c z.def

                                                    Est-ce que c'est bon?!

                                                    Edit: j'ai bien l'impression que non... quand je teste un main avec hello appelé dedans (z.h inclus), ça marche pas...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      8 avril 2006 à 16:51:49

                                                      Pour les DLL il faut une structure spéciale et pour les appeler dans un prog il faut utiliser des fonctions de windows.h(je crois qu'il faut charger un handle et que ça utilise les pointeurs sur fonction)
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        8 avril 2006 à 19:52:16

                                                        Citation : Navaati

                                                        Pour les DLL il faut une structure spéciale


                                                        Déjà signalé ici : http://www.siteduzero.com/forum-83-30318-230550.html#r230550
                                                        Détails :

                                                        <lien url="http://support.microsoft.com/default.aspx?scid=kb;fr;815065">http://support.microsoft.com/default.aspx?scid=kb;fr;815065</lien>
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Music only !
                                                        Anonyme
                                                          9 avril 2006 à 8:39:14

                                                          Merci beaucoup pour le lien! Je dois avouer que je n'ai pas bien cherché (mais je manquait de temps aussi...) Ils disent: "l'adressse de la fonction". je suppose qu'il faut utiliser les pointeurs de fonctions alors?
                                                          Edit: non désolé j'avais pas bien compris. Mais après je donne quoi comme options pour gcc?
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            10 avril 2006 à 17:47:47

                                                            Citation : Ze moi

                                                            Up :D


                                                            Si tu utilises Code::Blocks, tu crées un projet DLL. Ca se débrouille...
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Music only !

                                                            Les headers

                                                            × 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