Partage
  • Partager sur Facebook
  • Partager sur Twitter

GCC veut pas des librairies :(

    22 octobre 2006 à 19:35:38

    Bonjour, je débute avec gcc car kdevelop me semble être trop compliqué.

    Il y a quelque chose qui me tracasse. Exemple simple, si j'intègre la librairie standard math.h dans un fichier .c et que je le compile avec gcc, gcc ne la trouve pas alors qu'elle est bien présente dans /usr/include (et gcc va chercher là dedans par défaut les librairies d'entête).

    Mon fichier main.c :
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>

    int main()
    {
        float a;
        a = cos(18);
        return 0;
    }


    L'erreur retournée :

    dorian@dorian-desktop:~/entrainement_c/projet1$ gcc main.c -Wall -ansi
    /tmp/ccucisQX.o : Dans la fonction "main":main.csad.text+0x26): référence indéfinie vers « cos »
    collect2: ld a retourné 1 code d'état d'exécution


    J'ai même essayé avec l'option -I :

    dorian@dorian-desktop:~/entrainement_c/projet1$ gcc main.c -Wall -ansi -I/usr/include/
    /tmp/cccY5bh1.o : Dans la fonction "main":main.csad.text+0x26): référence indéfinie vers « cos »
    collect2: ld a retourné 1 code d'état d'exécution

    Si quelqu'un pourrait m'aider...

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      22 octobre 2006 à 19:41:26

      Il faut linker la lib math à la main, en rajoutant -lm dans les options de linkage de gcc, si je me souviens bien.
      • Partager sur Facebook
      • Partager sur Twitter
        22 octobre 2006 à 19:43:54

        Euh, peux-tu préciser comment faire s'il te plaît ? Je ne vois pas.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          22 octobre 2006 à 19:46:26

          Dans l'appel par la ligne de commande :
          gcc main.c -Wall -ansi -lm

          • Partager sur Facebook
          • Partager sur Twitter
            22 octobre 2006 à 19:47:50

            Ah, merci. Mais comment ça se fait ? Quelle différence entre math.h et stdlib.h par exemple ?

            Ils ne sont pas placés dans le même répertoire ? Mais pourquoi gcc reconnaît directe stdio.h ou stdlib.h et pas math.h ?

            C'est bizarre.
            • Partager sur Facebook
            • Partager sur Twitter
              22 octobre 2006 à 20:01:07

              Citation : NiRaDo

              Ah, merci. Mais comment ça se fait ? Quelle différence entre math.h et stdlib.h par exemple ?

              Ils ne sont pas placés dans le même répertoire ? Mais pourquoi gcc reconnaît directe stdio.h ou stdlib.h et pas math.h ?

              C'est bizarre.


              Rien de bizarre. Ce qui est bizarre, ce sont les mots que tu emploies à tord et à travers...

              1- Il faut cesser cette confusion répétitive entre bibliothèque (.a, ici, libm.a) et fichiers d'entête.
              2 - Inclure un fichier d'entête (.h) ne fait que fournir au compilateur les moyens de compiler correctement (prototypes, et ce qu'il faut pour les définir, structures, types, constantes...)
              3 - Ton environnement de développement est configuré pour ajouter automatiquement la bibliothèque standard du C au projet. Afin d'alleger les projets, celle-ci est probablement implémentée par 2 fichiers distincts : libc.a et libm.a. Le premier contient toutes les fonctions standards (et les extensions) sauf les fonctions mathématiques. Le second contient toutes les fonctions mathématiques (declarées dans <math.h>). En général, seul le premier fichier est ajouté automatiquement. Pour bénéficier des fonctions du 2ème, il faut précisement ajouter la bibiothèque libm.a au projet avec la commande -lm.

              Détails dans la doc de gcc qu'il n'est pas inutile de lire, ça fait travailler l'anglais.

              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                22 octobre 2006 à 20:13:46

                Merci pour ton expliquation, mon cerveau est plus éclairé. Il faut dire qu'il y a plusieurs choses qui sont "troubles" pour moi.

                • Partager sur Facebook
                • Partager sur Twitter
                  22 octobre 2006 à 20:27:32

                  Citation : NiRaDo

                  Merci pour ton expliquation, mon cerveau est plus éclairé. Il faut dire qu'il y a plusieurs choses qui sont "troubles" pour moi.


                  Alors pose des questions, on est là pour ça...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    22 octobre 2006 à 21:14:45

                    Pour continuer dans l'éclaircicement :

                    Citation : NiRaDo

                    Bonjour, je débute avec gcc car kdevelop me semble être trop compliqué.



                    Hum Kdevelop n'est qu'un IDE, et il utilise aussi gcc pour compiler. gcc lui est le compilateur !

                    Voilà juste pour t'éviter certaines confusions
                    • Partager sur Facebook
                    • Partager sur Twitter

                    GCC veut pas des librairies :(

                    × 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