staging.inyokaproject.org

Codeblocks erkennt math.h nicht

Status: Ungelöst | Ubuntu-Version: Ubuntu GNOME 18.04 (Bionic Beaver)
Antworten |

igodphil

Anmeldungsdatum:
4. Mai 2020

Beiträge: Zähle...

Hi Leute;

ich habe ein Problem mit Codeblocks. Und zwar sollen wir ein C-Programm schreiben mit einfachen Matheoperationen und haben dafür die math.h Bibliothek eingefügt. Hierzu der Quellcode:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h> /*Präprozessoranweisung*/
#include <math.h>
#include <stdlib.h>
#include <time.h>

#define pi 3.141592

int main (void)
{
    /* const double pi = 3.141592*/
    double winkel; /*Deklaration der Var winkel*/
    winkel = 90;

    printf("Bitte geben Sie den Winkel ein: ");
    scanf("%lf", &winkel); /* &: berechnet aus Varnamen die Speicherplatznummer*/
    fflush(stdin);

    double sinus;
    sinus = sin(winkel * pi/180); /*Funktionsaufruf*/
    printf("Der Sinus betr%cgt: %lf\n", 132,sinus);

    double cosinus;
    cosinus = cos(winkel * pi/180); /*Funktionsaufruf*/
    printf("Der Cosinus betr%cgt: %lf\n",132,cosinus);

    double potenz;
    potenz = pow(2, 7);
    printf("2 hoch 7 ist: %lf\n", potenz);
    potenz = pow(7, 2);
    printf("7 hoch 2 ist: %lf\n", potenz);

    double seiteA, seiteB, seiteC; /*Dreieck berechnen*/
    printf("Geben sie die L%cnge der Seite A ein: ", 132);
    scanf("%lf", &seiteA);
    fflush(stdin);
    printf("Geben sie die L%cnge der Seite B ein: ", 132);
    scanf("%lf", &seiteB);
    fflush(stdin);
    seiteC = sqrt(pow(seiteA, 2) + pow(seiteB, 2));
    printf("Die L%cnge der Seite C ist: %.3lf\n", 132, seiteC);

    double zahl;
    zahl = 0.2;
    double mantisse;
    int exp;
    mantisse = frexp(zahl, &exp);
    printf("%lf ist 2 hoch %d * %lf\n", zahl, exp, mantisse);

    srand(time(0)); /*bindet die Zufallszahl an die aktuelle Uhrzeit*/

    int zufall;
    zufall = rand();
    printf("Zufallszahl: %d\n", zufall);


    return 0;
}

Leider gibt mir Codeblocks aber immer nur die Fehlermeldung

undefinierter Verweis auf "sin" error: ld returned 1 exit status

etc aus, quasi alle Mathefunktionen. Der Code ist so aber richtig, da er in meiner Windows VM auf dem Mac so einwandfrei in Codeblocks ausgeführt wird. So wie ich das im internet gelesen habe, scheint es am Linker zu liegen. Daher meine Frage ob mir wer helfen kann, diesen Fehler zu beheben?

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

igodphil schrieb:

So wie ich das im internet gelesen habe, scheint es am Linker zu liegen. Daher meine Frage ob mir wer helfen kann, diesen Fehler zu beheben?

Indem du dem Linker sagst, dass du gegen die math-Bibliothek linken willst. Das geht mit dem Argument -lm, das du in die Linker-Argumente reinbasteln musst (sollte unter Linux ähnlich wie unter Windows funktionieren), die von Codeblocks für dein Projekt genutzt werden.

Zu Fuß könntest du das so machen:

gcc mein_programm.c -lm -o mein_programm 

Ich würde gerade für den Anfang auf eine IDE verzichten und den Kompiler-/Linker-Aufruf selber machen bzw. selber ein Makefile schreiben, dann lernt man die Zusammenhänge besser als wenn man da gleich zusätzliche Abstraktionsebenen einbaut.

Antworten |