Undefined reference to pow( ) in C, despite including math.h

C

C Problem Overview


> Possible Duplicate:
> Problem using pow() in C
> what is 'undefined reference to `pow''

I'm having a bit of an issue with a simple piece of coursework for uni that's really puzzling me.

Essentially, I've to write a program that, amongst other things, calculates the volume of a sphere from a given radius. I thought I'd use the pow() function rather than simply using r*r*r, for extra Brownie points, but the compiler keeps giving me the following error:

> undefined reference to 'pow' > collect2: error: ld returned 1 exit status

My code looks like the following:

#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);
}

and I'm compiling with the command gcc -o sphere sphere.c

This compiles and runs fine in code::blocks on the Windows machines at uni, but on my Fedora 17 at home the command line compiler refuses to run. Any thoughts would be gratefully appreciated!

Blessings, Ian

C Solutions


Solution 1 - C

You need to link with the math library:

gcc -o sphere sphere.c -lm

The error you are seeing: error: ld returned 1 exit status is from the linker ld (part of gcc that combines the object files) because it is unable to find where the function pow is defined.

Including math.h brings in the declaration of the various functions and not their definition. The def is present in the math library libm.a. You need to link your program with this library so that the calls to functions like pow() are resolved.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIan KnightView Question on Stackoverflow
Solution 1 - CcodaddictView Answer on Stackoverflow