ongedefinieerde verwijzing naar POW () in C, ondanks het opnemen van math.h

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 statusis afkomstig van de linker ld(onderdeel van gcc dat de objectbestanden combineert) omdat het niet in staat is om zoek waar de functie powis gedefinieerd.

Het opnemen van math.hzorgt 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.

Other episodes