web-dev-qa-db-fra.com

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

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

Je suis un peu un problème avec un simple morceau de coursework pour uni qui me laisse vraiment 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 de simplement utiliser r*r*r, pour des points Brownie supplémentaires, mais le compilateur continue de me donner l’erreur suivante:

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

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

Ceci compile et fonctionne bien dans code :: blocks sur les machines Windows chez uni, mais sur mon Fedora 17 à la maison, le compilateur en ligne de commande refuse de s'exécuter. Toute pensée serait grandement appréciée!

Bénédictions, Ian

64
Ian Knight

Vous devez établir 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 provient de l'éditeur de liens ld (partie de gcc combinant les fichiers objets) car il est impossible de localiser l'emplacement de la fonction pow.

Comprenant math.h introduit 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 telles que pow () soient résolus.

134
codaddict