Supportnet / Forum / Anwendungen(Java,C++...)
math.h unter Linux ????
Frage
Hi Leute,
wieso kann ich keine Standardfunktionen aufrufen, die in der "math.h - Datei" definiert sind? (z. B. double sqrt(double), double cos(double) etc...)
Ich bekomme folgende Fehlermeldung:
/tmp/cc97uUm9.o: In function `poko':
/tmp/cc97uUm9.o(.text+0xdf): undefined reference to `sqrt'
/tmp/cc97uUm9.o(.text+0xf8): undefined reference to `atan2'
collect2: ld returned 1 exit status
Dieselbe Datei kann ich unter GNU-C für Windows problemlos übersetzen! Nur unter Linux nicht?
Bitte um Hilfe.
Vielen Dank schonmal im Vorraus!!
Grüße Ciao
homer
Antwort 1 von semi
Sieht so aus als ob es eine Fehlermeldung vom Linker wäre. Irgendeine Bibliothek wird beim Linken nicht miteinbezogen.
Wie compilierst Du das ganze Zeug?
Wie compilierst Du das ganze Zeug?
Antwort 2 von homer :-)
Hi Semi,
ich übersetze es ganz normal mit dem freien Gnu-C-Compiler.
"gcc *.c"
habe schon viel übersetzt. Auch komplette Linux-Kernels und diverse Programme. Klappt alles.
Auch unter der Windows-Version des gcc-Compilers funktioniert es. Nur unter Linux nicht. Habe es schon bei Debian und bei RedHat 7.3 ausprobiert. Bei beide Systemen hargenau die gleiche Fehlermeldung.
Auch hier wieder danke für deine Antwort!
Grüße homer
ich übersetze es ganz normal mit dem freien Gnu-C-Compiler.
"gcc *.c"
habe schon viel übersetzt. Auch komplette Linux-Kernels und diverse Programme. Klappt alles.
Auch unter der Windows-Version des gcc-Compilers funktioniert es. Nur unter Linux nicht. Habe es schon bei Debian und bei RedHat 7.3 ausprobiert. Bei beide Systemen hargenau die gleiche Fehlermeldung.
Auch hier wieder danke für deine Antwort!
Grüße homer
Antwort 3 von semi
So kann es auch nicht funktionieren.
(Ich glaube nicht, dass es unter Windows so ging)
Versuche folgendes:
(Beispielcode)
Übersetzen mit:
gcc sqrt.c -o sqrt -lm
oder
gcc -O3 sqrt.c -o sqrt -lm -s
Gruss,
Michael
(Ich glaube nicht, dass es unter Windows so ging)
Versuche folgendes:
(Beispielcode)
#include <stdio.h>
#include <math.h>
int main(int argc, char **argv) {
float i = 36.f;
float j = sqrt(i);
printf("sqrt(%.2f) = %.2f\n", i, j);
return 0;
}
Übersetzen mit:
gcc sqrt.c -o sqrt -lm
oder
gcc -O3 sqrt.c -o sqrt -lm -s
Gruss,
Michael
Antwort 4 von homer :-)
Wieso kann es so nicht funktionieren? Was ist an der "math.h" so speziell?
Mit GCC für Windows funktionierte es wircklich. Jetzt unter Linux auch mit der Option -lm. Wieso -lm?
Aber egal, mit g++ *.c funktioniert es auch ohne Schalter.
Vielen Dank,
Ciao homer
Mit GCC für Windows funktionierte es wircklich. Jetzt unter Linux auch mit der Option -lm. Wieso -lm?
Aber egal, mit g++ *.c funktioniert es auch ohne Schalter.
Vielen Dank,
Ciao homer

