sin() geht nicht?



  • Hallo,

    ich komme gerade nicht weiter und verstehe nicht warum.

    also ich habe einfach folgendes geschrieben

    #include <stdio.h>
    #include <math.h>
    
    int main (void)
    {
    	double x=2.0,y;
    
    	y = sin(x);
    
    	printf("sin(%lf) = %lf", x, y);
    
    }
    

    beim kompilieren bekomme ich jetzt aber gesagt undefined reference to sin
    die math.h hat er aber gefunden, zumindest meckert er nicht diesbezüglich.

    Was hab ich falsch gemacht?



  • Also bei mir funktionierts problemlos...



  • Anscheinend fehlt bei Dir die C-Runtime-Lib. In der math.h steht nur drin, wie die Funktion aufgerufen wird, aber nicht was sie machen. Also im Beispiel sin steht dadrin, dass sin sin heisst, einen double rein geht und ein double raus geht. Was innen drin mit dem reingehenden double gemacht wird, steht nicht im Header, sondern in der Lib.
    Vielleicht den Compiler nochmal neu installieren.



  • Es ist alles in Ordnung. Nur unter Linux/Unix sind die Math-Funktionen in einer seperaten Library, die du extra linken musst. Ruf einfach den gcc mit dem Parameter -lm auf. (Wenn du eine IDE benutzt, dann trag einfach -lm bei den Linkeroptionen (LDOPTIONS oder LIBS auch genannt) ein).



  • rüdiger schrieb:

    Es ist alles in Ordnung. Nur unter Linux/Unix sind die Math-Funktionen in einer seperaten Library, die du extra linken musst. Ruf einfach den gcc mit dem Parameter -lm auf. (Wenn du eine IDE benutzt, dann trag einfach -lm bei den Linkeroptionen (LDOPTIONS oder LIBS auch genannt) ein).

    Super schnelle Lösung, danke. Jetzt muss ich nur noch rauskriegen wie ich das für mein Kernelmodul aufrufen muss.





  • JJR schrieb:

    rüdiger schrieb:

    Es ist alles in Ordnung. Nur unter Linux/Unix sind die Math-Funktionen in einer seperaten Library, die du extra linken musst. Ruf einfach den gcc mit dem Parameter -lm auf. (Wenn du eine IDE benutzt, dann trag einfach -lm bei den Linkeroptionen (LDOPTIONS oder LIBS auch genannt) ein).

    Super schnelle Lösung, danke. Jetzt muss ich nur noch rauskriegen wie ich das für mein Kernelmodul aufrufen muss.

    Wenn du ein Kernelmodul kompilierst, sieht die Sache natürlich anders aus, da du da keine C-Standard Library linken kannst.


Anmelden zum Antworten