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?
-lm
is simply telling it to link libm
, which contains all the floating point math routines, including (no surprise here) fmod
.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With