(C) math.h und sqrt
Philipp Hasenfratz
- programmiertechnik
Halihallo zusammen
Die libc-Funktion sqrt ist bekanntlich in <math.h> deklariert. Um
sqrt() zu verwenden, muss als #include <math.h> her. Aber siehe
Output: undefined reference to 'sqrt'...? - Ich glaube man kann bei
diesem kleinen Beispiel gar nichts falsch machen und dennoch...
Habe ich da etwas übersehen?
hasenfra@frazy:~/t> cat test.c
#include <math.h>
#include <stdio.h>
int main(void) {
double x = 25;
printf("%.5f\n", sqrt(x));
return 0;
}
hasenfra@frazy:~/t> gcc -Wall test.c -o test
/tmp/ccoPwCQd.o: In function main': /tmp/ccoPwCQd.o(.text+0x2b): undefined reference to
sqrt'
collect2: ld returned 1 exit status
hasenfra@frazy:~/t>
Viele Grüsse
Philipp
Hallo Philipp,
Habe ich da etwas übersehen?
Du musst das Programm gegen die libm.so linken.
hasenfra@frazy:~/t> gcc -Wall test.c -o test
gcc -Wall test.c -o test -lm
Viele Grüße,
Christian
Halihallo Christian
Habe ich da etwas übersehen?
Du musst das Programm gegen die libm.so linken.
OK. Weisst du, wo ich dies das nächste mal nachlesen könnte
(vielleicht kommt sowas bei einer anderen lib wieder vor). In der
'man sqrt' steht darüber nix :-(
hasenfra@frazy:~/t> gcc -Wall test.c -o test
gcc -Wall test.c -o test -lm
Das funktioniert ja wunderprächtig! - Vielen Dank, Christian!
Viele Grüsse
Philipp
Hallo Philipp,
OK. Weisst du, wo ich dies das nächste mal nachlesen könnte
(vielleicht kommt sowas bei einer anderen lib wieder vor). In der
'man sqrt' steht darüber nix :-(
Leider kann ich Dir dazu nur sagen: "Das weiß man einfach". Aber ich kann Dich beruhigen, die C-Standardbibliothek (zu der ja sqrt() & Co. zählen) ist nur auf libm.so und libc.so verteilt. Konkret: mit einem -lm stehen Dir auf jeden Fall alle Funktionen der ANSI-C-Standardbiliothek zur Verfügung (-lc ist ja implizit).
Viele Grüße,
Christian