Après plusieurs tentatives de compilation avec gcc (sur des fichiers C différents), et malgré les « bonnes inclusions », par exemple : #include <stdio.h> #include <stdlib.h> #include <math.h>
la compilation échoue, comme si le compilateur ne trouvait pas ou plus math.h.
Je ne l’ai d’ailleurs pas trouvé dans /usr/include, ni ailleurs.
Ce (mé)fait depuis ma réinstallation fraîche de la distribution 18.04, après une tentative avec la 20.04 qui n’avait pas de fichier pour mon imprimante HP.
Le formatage a été complet, / et /home puis j’ai remis mes fichiers personnels.
<math.h> est normalement une inclusion du langage C, lequel est indépendant d’un système exploitation, sauf bien sûr à lui fournir un compilateur spécifique et des bibliothèques de fonctions compilées pour celui-ci.
Il faut effectivement utiliser l’option libm (-lm) si tu utilises math.h
La sortie gcc ne te renvoie rien si la compilation se passe bien (code de sortie = 0).
Tu dois voir apparaitre ton executable tutodev.out si tu n’as pas spécifié de fichier de sortie (-o programme.exe par exemple)
Michel, je me suis permis d’éditer tes posts afin de mettre les commandes et le code en forme (il faut utiliser le bouton </> de l’éditeur pour signaler les lignes de code).
Comme le dit Fanch, si tu n’as pas d’erreur après avoir utilisé la commande gcc et effectué la liaison avec -lm c’est bien parce que ça a fonctionné
Tu dois avoir un exécutable a.out dans le répertoire.
Vincent,
Merci pour la mise en forme, je ne savais pas faire. Il faudra que j’essaye les 4 espaces pour cette mise en forme, très nettement plus élégante et plus lisible.
Dans le premier essai réalisé, il n’y avait pas eu génération d’un « a.out » :
gcc programme.c -lm mais si j’ajoute gcc programme.c -lm -o prog
ça fonctionne !
(NB : bien séparer -lm et -o, sinon ça ne compile pas).
Merci à tous, problème résolu.
Mais depuis quand faut-il utiliser ce commutateur « -lm » --en plus bien sûr de <math.h> ???
À tout hasard, j’ai compilé l’un de mes programmes ne faisant que des calculs simples, volontairement multi-fichiers (7 .c, un .h, le makefile) qui s’est compilé sans problème à l’appel de « make ».
NB : après vérification de quelques errements personnels en C, je n’ai pas trouvé de programme nécessitant <math.h>…
J’ai vérifié « math.h » dans Wikipédia, chapitre « libm »
« Sous Linux et FreeBSD, les fonctions mathématiques (telles que déclarées dans math.h) sont regroupées séparément dans la bibliothèque mathématique libm. Donc si l’une de ces fonctions est utilisée, la directive -lm doit être ajoutée à l’éditeur de liens. »
(ici : math.h — Wikipédia)