123 votes

Référence non définie à pow( ) en C, malgré l'inclusion de math.h

Duplicata possible :
Problème d'utilisation de pow() en C
qu'est-ce qu'une "référence indéfinie à `pow'" ?

J'ai un petit problème avec un simple travail de cours pour l'université qui me laisse vraiment perplexe.

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

référence indéfinie à 'pow'. collect2 : error : ld returned 1 exit status

Mon code ressemble à ce qui suit :

#include <math.h>

#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 compile avec la commande gcc -o sphere sphere.c

Cela compile et fonctionne bien dans code::blocks sur les machines Windows à l'université, mais sur mon Fedora 17 à la maison, le compilateur en ligne de commande refuse de fonctionner. N'hésitez pas à me faire part de vos réflexions !

Bénédictions, Ian

252voto

codaddict Points 154968

Vous devez faire le 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 vient de l'éditeur de liens ld (partie de gcc qui combine les fichiers d'objets) parce qu'il est incapable de trouver où la fonction pow est défini.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X