mohit
mohit

Reputation: 1081

gcc gives error while using fmod()

Sample code for fmod:

#include <stdio.h>    
#include <math.h>

int main(void)   
{    
  double x = 0.14527, y = 3.14159;   
  printf("fmod(x, y) = %.6lf\n", fmod(x, y));    
  return 0;    
}

Compiling:

$ gcc main.c -o main

I get

/tmp/ccztJO01.o: In function `main':

main.c:(.text+0x4d): undefined reference to `fmod'

collect2: ld returned 1 exit status

Then I found this in Google:

$ gcc -lm main.c -o main

Why should I use -lm, what is it exactly? From where I can get more information about gcc in detail?

Upvotes: 10

Views: 16023

Answers (3)

Nathan Chappell
Nathan Chappell

Reputation: 2436

When I input gcc -lm main.c -o main I still get a linker error. I need to write gcc main.c -lm -o main for it work right. If it's working for you the other way, that's a bit odd. I understand that the linker will find the symbol declared in main.c (i.e. double fmod(double,double)), but only resolve it if it finds its definition later on (i.e. in libm.a).

Long story short, the libraries must be placed (at least once) "to the right of" the place where they are used.

Upvotes: 7

Nikolai Fetissov
Nikolai Fetissov

Reputation: 84151

It's not the compiler, but the linker, ld, that is complaining. It cannot find the routine fmod in your program. You have to tell it to link with math library libm with the -l flag.

[Much] more info: GCC, the GNU Compiler Collection.

Upvotes: 5

Jerry Coffin
Jerry Coffin

Reputation: 490008

-lm is simply telling it to link libm, which contains all the floating point math routines, including (no surprise here) fmod.

Upvotes: 13

Related Questions