PDA

View Full Version : problem with <math.h> using gcc



xenon
01-08-2004, 03:34 PM
I started using Knoppix (3.3) some days ago, mainly to write C-programs (but I'm liking it more&more, also for the rest of the package!).
I am, however, experiencing problems in compiling programs that use <math.h>. F.i.:

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

int main(){
printf("%f\n",sqrt(123.456));
return 0;
}

Won't compile, giving:

knoppix@ttyp0[test]$ gcc test.c
/tmp/cc8Hr3am.o(.text+0x1a): In function `main':
: undefined reference to `sqrt'
collect2: ld returned 1 exit status
Can someone explain what's going wrong? I have no problems including <ctype.h> or <string.h>.

I'm a complete Linux noob, so please help me...

baldyeti
01-08-2004, 04:31 PM
It's a link-time error; you need to add '-lm' to your command line in order to pull in the math library.

xenon
01-08-2004, 04:55 PM
Thx very much! It worked!

Are there more problems to be expected when including standard header files? Is -lm always enough to cure these kind of linking problems?
And more important: where can I find info on these matters?

Thx in advance.

baldyeti
01-08-2004, 09:35 PM
These are not problems, just the way the C compiler works on pretty much every unix system. -lm is a shortcut meaning you want the linker to look in standard places for a library called libm.a. On linux, tens of libraries live under /usr/lib, amongst which the default libc.a. If you wanted to link against say libcups.a, you could similarly specify -lcups. If you want to see what's in a library , use ar (eg "ar -tvf /usr/lib/libm.a").

As to where to look for information, I'm afraid the references I might give you would be embarassingly outdated (hints: Kernighan & Richie, Kernighan & Pike, Rochkind, Stevens). Just google for "unix programming". Have fun ... and be prepared for what might become a long journey!

xenon
01-08-2004, 10:16 PM
Thanks again!
I'm not afraid of a long journey!