Fehler im Quell-Code? Oder muss noch was includiert werden???
-
Hi Leute!!!
kann mir jemand sagen warum mein Compiler diesen Fehler rausscheisst???
cc test.c
/tmp/cc2JH2rE.o(.text+0x16): In functionwurzel': : 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???
-
Sieht nach gcc aus(?). Dann musst du für mathematische Funktionen die libm.a mitlinken, das geschieht mittels des zusätzlichen Kommandozeilenparameters -lm.
-
Wowan schrieb:
Hi Leute!!!
kann mir jemand sagen warum mein Compiler diesen Fehler rausscheisst???
cc test.c
/tmp/cc2JH2rE.o(.text+0x16): In functionwurzel': : 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???
außerdem ist das ein wenig übertrieben..
ein#define WURZEL(x) sqrt(x)
würde meiner meinung nach reichen.
(eigent ich würde auch ein ( int main(){return 3;} reichen
)
Und sowieso es heißt int main und nicht main
-
xroads42 schrieb:
(eigent ich würde auch ein ( int main(){return 3;} reichen
)
Nur das seine main implizit 0 und nicht 3 zurück gibt.
-
@xroads
Also wenn man es schon so genau nimmt dann: int main(void)
-
Wozu, ist doch keine Deklaration.
-
@Bashar
Dann bräuchte man aber auch kein int vor main, oder??
-
In C99 schon. Was hat das damit zu tun?
---
gcc (3.2.2) scheint sich nicht an den Standard zu haltenint foo() { return 0; } void bar() { foo(42); }
dürfte nicht compilieren, weil foo eine Definition ist.
C99 6.7.5.3 schrieb:
An empty list in a function
declarator that is part of a definition of that function
specifies that the function has no parameters. The empty
list in a function declarator that is not part of a
definition of that function specifies that no information
about the number or types of the parameters is
supplied.Tuts aber
Also doch (void) schreiben, obwohls eigentlich überflüssig sein sollte
-
Danke für die Vorschläge!!!
das Prog. war nur `ne Testversion, um es mit sqrt() hinzukriegen. Der erste Vorschlag von Bashar war auch gleich die Lösung. Man muss unter Linux die mlib mitübergeben und das wusste ich nicht. Jetzt tut es einwandfrei. Mitlerweile hab ich das Prog verfeinert. Mit Ein-/ und Ausgabe und weiterem Schnick-Schnack.
Ist 'ne schöne Ecke hier.
Gut, das ich auf dieses Forum gestoßen bin. Ist echt nicht schlecht....
Danke
Wowan
-
Da die Funktion main nichts zurück gibt würde,auch ein void main(void) ausreichen...Ist aber kein ansi standart deswegen muckt gcc etwas beim compilieren.
-
c-neuling schrieb:
Da die Funktion main nichts zurück gibt würde,auch ein void main(void) ausreichen...Ist aber kein ansi stan**** deswegen muckt gcc etwas beim compilieren.
Die Funktion Main gibt immer etwas zurück, und das wird als Fehlercode interpretiert,
so steht die 0 für alles ok und z.B. eine 1 signalisiert einen Fehler, gibt da
verschiedene, weiß da jetzt nicht genau welcher für was steht und das ist zudem
OS abhängig.Wir sind hier nunmal im Ansi C Forum und alles was nicht standardkonform ist, ist
einfach falsch.Die implizite int Regel gibt es nur im C89 Standard, nicht mehr im C99 Standard,
wobei sicherlich kein Compiler dir deswegen das kompilieren verweigern wird, da
es ja noch alte Programme gibt, die auf den alten Regeln basieren.