Da hat schon wieder ein Anfänger 'ne blöde Frage!



  • Hi,

    also ich bin Totalanfänger und versuche mich in C mit Hilfe div. Bücher einzuarbeiten. Scheitere aber schon an den einfachsten Sachen.
    z.B.:
    Wenn ich mathematische Funktionen (sin, sqrt) brauche binde ich mit:
    #include <math.h>
    die Mathe-Header-Datei ein und alles ist gut. Soweit die Theorie.
    Mein Compiler gibt mir aber folgende Fehlermeldung:

    gcc -o test test.c
    test.c: In function `main':
    test.c:6: Warnung: Rückgabetyp von »main« ist nicht »int«
    /tmp/ccvhV2oD.o(.text+0x3a): In function `main':
    : undefined reference to `sin'
    collect2: ld gab 1 als Ende-Status zurück
    

    was mache ich falsch?

    Gruß Rene



  • Zeig mir deinen Quellcode und ich sag dir was falsch ist...
    Apropos "test.c:6: Warnung: Rückgabetyp von »main« ist nicht »int« ":
    Was steht bei dir in der main funktion nach dem return?

    Und zu :" /tmp/ccvhV2oD.o(.text+0x3a): In function main': : undefined reference tosin' "

    Kompilier mal mit:
    gcc -o test test.c /usr/lib/libm.a

    In math.h steht(wie in allen anderen Headern nur der Prototyp)...
    Du musst dein prog mit der lib libm.a linken dann gehts 😃



  • gcc -o test test.c -lm



  • ... oder so wie es der --linuxuser-- macht... 😃 😃 😃 😃 😃 😃 😃



  • Es klappt, mit beiden Compilerbefehlen. 😃
    Könnt ihr mir noch erklären, was ich da mache?
    Das mit dem falschen Rückgabewert hat wohl damit zu tun, das mein Programm sehr kurz ist.

    #include <stdio.h>
    #include <math.h>
    void main()
    {
        float x=2;
        float y=0;
        y=sqrt(x);
        printf("%g=sqrt(%g)\n",y,x);
    }
    

    War halt mein erster Test mit math.h

    Danke und Gruß



  • Dein Compiler erwartet als Rückgabewert von main ein Integer.
    Wenn du void benutzt, gibt es eine Warnung!



  • Momentan findet dein Compiler den Pfad zur math Bibliothek mit.
    D.h. Der Linker kann die Referenzen zu den Funktionen sin etc. nicht setzen,
    deshabl meckert er.
    Mit Angabe der Pfade kann compiliert und gelinkt werden!



  • Zero_Clamping schrieb:

    Momentan findet dein Compiler den Pfad zur math Bibliothek mit.

    Doch, den Pfad kennt er, nur dass er linken soll weiß er nicht.
    Hat --linuxuser-- aber oben schon erklärt; -lm ist die richtige Lösung; "gcc -o test test.c /usr/lib/libm.a" ist eher böse.



  • Ja, alles klar. Ich dachte, daß er den Pfad zur lib nicht findet, und hab da alles probiert, was geht(-I/dort/hier/usw).
    Das mit dem void und dem int vor main hab ich gleich mal nachgelesen und ist jetzt klar. Ist doch 'ne ganze Menge so zum Anfang. Danke für eure schnelle Hilfte und den guten Rat. 🙂

    MfG Rene


Anmelden zum Antworten