Référence indéfinie à pow () dans C, malgré l’inclusion de math.h

Duplication possible:
Problème d’utilisation de pow () dans C
Quelle est la référence indéfinie à «pow»?

J’ai un petit problème avec un simple cours pour uni qui me laisse perplexe.

Essentiellement, je dois écrire un programme qui, entre autres choses, calcule le volume d’une sphère à partir d’un rayon donné. Je pensais utiliser la fonction pow() plutôt que d’utiliser simplement r*r*r , pour des points Brownie supplémentaires, mais le compilateur continue à me donner l’erreur suivante:

référence indéfinie à ‘pow’ collect2: erreur: ld a renvoyé 1 état de sortie

Mon code ressemble à ceci:

 #include  #define PI 3.14159265 //defines the value of PI /* Declare the functions */ double volumeFromRadius(double radius); /* Calculate the volume of a sphere from a given radius */ double volumeFromRadius(double radius) { return (4.0/3.0) * PI * pow(radius,3.0f); } 

et je comstack avec la commande gcc -o sphere sphere.c

Cela comstack et tourne bien dans le code :: blocks sur les machines Windows à uni, mais sur mon Fedora 17 à la maison, le compilateur de ligne de commande refuse de s’exécuter. Toutes les pensées seraient appréciées avec reconnaissance!

Bénédictions, Ian

Vous devez créer un lien avec la bibliothèque de mathématiques:

 gcc -o sphere sphere.c -lm 

L’erreur que vous voyez: error: ld returned 1 exit status de l’éditeur de liens ld (partie de gcc qui combine les fichiers objects) car il ne peut pas trouver où la fonction pow est définie.

Y compris math.h apporte la déclaration des différentes fonctions et non leur définition. Le def est présent dans la bibliothèque mathématique libm.a Vous devez lier votre programme avec cette bibliothèque pour que les appels aux fonctions comme pow () soient résolus.