Partage
  • Partager sur Facebook
  • Partager sur Twitter

Compilation sous linux

gcc et les librairies

    16 janvier 2006 à 21:15:12

    Bon, moi je suis sous linux, et n'ayant pas encore installé d'IDE, j'utilise un éditeur de texte à colrisation syntaxique, puis pour la compilation j'utilise gcc.

    Le problème est le suivant:
    Si dans mon code j'inclue les librairies dans les directives de préprocesseur:

    #include <stdlib>
    #include <stdio>

    eh bien le fichier plante à la compilation!!

    Tandis que si je supprime ces directives, tout ce passe bien!!
    J'en concclus que les librairies sont automatiqement ajoutées par le compilateur, mais si j'utilise une librairie spécifique, ou non standard, sera-elle reconnue?
    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2006 à 21:18:59

      stdlib.h et stdio.h
      Si tu peux utiliser (par exemple) printf et exit sans avoir #include ces libs, alors c'est sûrement que gcc les inclus par défaut oui...
      • Partager sur Facebook
      • Partager sur Twitter
        16 janvier 2006 à 21:46:23

        Mais si je veux utiliser une librairie spéciale, comme la librairie math, sera-elle incluse toute seule??
        Et dans le cas de librairies plus rares?
        • Partager sur Facebook
        • Partager sur Twitter
          16 janvier 2006 à 21:47:02

          J'ai jamais compris pourquoi en C++ il fallait:
          - des fois virer le '.h'
          - des fois le mettre
          • Partager sur Facebook
          • Partager sur Twitter
            16 janvier 2006 à 21:48:50

            A mon avis les librairies en .h c'est les librairies utilisables en C. :euh:
            • Partager sur Facebook
            • Partager sur Twitter
              16 janvier 2006 à 21:49:32

              En C, faut pas se poser la question, les headers ont des .h ; en C++ les headers standards n'en ont pas, les autres suivent la convention C en général et en ont.

              Pour GCC, si tu veux utiliser d'autres libs, faut les linker en plus d'avoir le header. Par ex pour math.h.

              $ gcc foo.c bar.c -lm
              • Partager sur Facebook
              • Partager sur Twitter
                16 janvier 2006 à 21:59:32

                Après tests, j'ai l'impression que gcc inclus tous les headers standards sans qu'on lui demande.
                C'est pas un peu stupide au niveau des perfs et de la taille du fichier final ?
                • Partager sur Facebook
                • Partager sur Twitter
                  16 janvier 2006 à 22:17:52

                  Je pense pas. Des fonctions pas utilisées je pense pas que ca gêne les perfs.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 janvier 2006 à 22:24:03

                    Raison : Vous compilez comme des sales avec des options inadaptées. Faut mettre les warnings un peu. ;) Et en fait, ce que vous pensez être une inclusion automatique est en fait une fonctionnalité du C89 : Toute fonction non déclarée est déclarée comme étant int fonction() par défaut à la première utilisation...
                    D'où, ne pas inclure les headers standards est un coup à se cramer les doigts car si tu fais ça en n'ayant pas inclus stdlib.h :

                    int *p;
                    p = (int *) malloc(sizeof (int) * N);

                    Ca fera très mal cas malloc sera déclaré en tant que int malloc() et la valeur renvoyée par malloc sera interprétée comme si c'était un int et en plus elle sera faussement convertie en int *, autant te dire que rien ne va plus.

                    D'où la bonne habitude de ne pas caster le retour de malloc, et tant pis pour les C++iens qui ne pourront pas compiler le code.

                    Si GCC incluait bien les headers standards par défaut (ce qui est en fait possible et il peut très bien faire semblant de faire chier sur les warnings, rien n'empêche). Niveau perf (de GCC), ça améliorerait la chose parce que GCC ne parserait pas les headers standads : il les connaitrait. Niveau taille du fichier final, on n'est pas en C++ ici où inclure un header standard fait gonfler ton exécutable de 300K...

                    ps : Mes options de dév/debug sont :
                    nml@xenotype ~ $ grep DCFLAGS ./.bashrc
                    export DCFLAGS="-Wall -std=gnu99 -pedantic -Wconversion -Wpointer-arith -Wbad-function-cast -Wcast-align -D_POSIX_C_SOURCE=200112L -D_XOPEN_SOURCE=600 -ggdb3"
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Compilation 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