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

Total
0
Shares

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


Solution

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.

Source: StackOverflow.com

Leave a Reply

Your email address will not be published. Required fields are marked *