• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Fehler im Quellcode???

A

Anonymous

Gast
Hi Leute!!!

kann mir jemand sagen warum mein Compiler diesen Fehler rausscheisst???

cc test.c
/tmp/cc2JH2rE.o(.text+0x16): In function `wurzel':
: undefined reference to `sqrt'

hier der Quell-Code:
------------------------------------------
#include <stdio.h>
#include <math.h>

double wurzel(int i)
{
return sqrt(i);
}

main ()
{
wurzel(9);

}
------------------------------------------

Das Prog soll Wurzel aus einer Zahl berechnen. Normalerweise ist ja sqrt() in math.h drin. Was will der Compiler noch von mir???
 

hardy

Newbie
Anonymous schrieb:
Hi Leute!!!

kann mir jemand sagen warum mein Compiler diesen Fehler rausscheisst???

cc test.c
/tmp/cc2JH2rE.o(.text+0x16): In function `wurzel':
: undefined reference to `sqrt'

hier der Quell-Code:
------------------------------------------
#include <stdio.h>
#include <math.h>

double wurzel(int i)
{
return sqrt(i);
}

main ()
{
wurzel(9);

}
------------------------------------------

Das Prog soll Wurzel aus einer Zahl berechnen. Normalerweise ist ja sqrt() in math.h drin. Was will der Compiler noch von mir???


Hi,

wozu brauchst Du denn die Funktion Wurzel überhaupt ?
Ruf doch im Hauptprogramm direkt die Funktion sqrt auf..

Dein Problem hier ist, daß die sqrt falsch aufrufst, sqrt will als Argument ein double, Du übergibst aber einen Integer.

Die einfachste Variante für Dich wäre wohl ein cast auf double, also sowas

double wurzel(int i)
{
return sqrt( (double) i );
}

dann geht es...

oder direkt im Hauptprogramm mit

double ergebnis;
ergebnis = sqrt ( 9.0 );

ach ja, ausgeben solltest du das Ergebnis vielleicht auch noch...
printf(" Wurzel aus 9.0 ist %5.3f", ergebnis);

Gruß Hardy
 

Wowan

Newbie
Hi!!!

Es scheint als würdest du mit gcc arbeiten. Du musst die Bibliothek libm beim compilieren mit übergeben.

z.B cc dateiname.c -lm -o zieldatei oder so ähnlich.

Müsste so klappen. Wenn nicht, probier mal rum. Auf jeden Fall ist es die libm, die du mit übergeben musst.

Viel Erfolg
 

hardy

Newbie
Hi,
hier mal ein komplettes Beispiel:

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

double wurzel(int i)
{
return sqrt( (double) i);
}

int main ()
{
double ergebnis;
ergebnis = wurzel(9);
printf("Wurzel 9 ist: %5.2f \n", ergebnis);
return 0;
}

Das Ganze z.b. in die Datei demo.c schreiben.

Übersetzen unter Linux mit
gcc -o demo -lm demo.c

dann mit ./demo ausführen
Ausgabe hier ist dann:

Wurzel 9 ist: 3.00

Gruß Hardy
 
Oben