Philipp Hasenfratz: (C) math.h und sqrt

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

  1. 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

    1. 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

      1. 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