mogelijk Duplicaat:
probleem met POW () in C
Wat is ‘undefined referentie naar `pow’ ‘
Ik heb een beetje een probleem met een eenvoudig stuk cursussen voor Uni dat me echt puzzelt.
In wezen moet ik een programma schrijven dat onder andere het volume van een bol van een gegeven straal berekent. Ik dacht dat ik de pow()
–functie zou gebruiken in plaats van simpelweg met r*r*r
, voor extra brownie-punten, maar de compiler blijft me de volgende fout geven:
undefined referentie naar ‘POW’
Collect2: Fout: LD Geretourneerde 1 Exit-status
Mijn code ziet eruit als het volgende:
#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);
}
en ik compileer met de opdracht gcc -o sphere sphere.c
Dit compileert en loopt prima in code :: Blocks op de Windows-machines bij Uni, maar op mijn Fedora 17, weigert de opdrachtregelcompiler om te rennen. Eventuele gedachten zouden dankbaar worden gewaardeerd!
Zegeningen,
Ian
Antwoord 1, Autoriteit 100%
U moet koppelen met de wiskundebibliotheek:
gcc -o sphere sphere.c -lm
De fout die u ziet: error: ld returned 1 exit status
is afkomstig van de linker ld
(onderdeel van gcc dat de objectbestanden combineert) omdat het niet in staat is om zoek waar de functie pow
is gedefinieerd.
Het opnemen van math.h
zorgt voor de declaratie van de verschillende functies en niet voor hun definitie. De def is aanwezig in de wiskundebibliotheek libm.a
. U moet uw programma aan deze bibliotheek koppelen zodat de aanroepen naar functies zoals pow() worden opgelost.