Fehler beim kompilieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
maikl
Beiträge: 83
Registriert: 23.11.2002 14:54:50
Wohnort: Halle
Kontaktdaten:

Fehler beim kompilieren

Beitrag von maikl » 14.08.2003 17:36:36

Hallo,

ich wollte gerad nbissl unter Debian C-coden, als ich bei folgendem Problem hängen blieb:

source von ner einfachen Wurzelberechnung:

Code: Alles auswählen

#include <stdio.h>
#include <math.h>
                                                                                
int main()      {
        double x=4;
        printf("\nWurzel von %f = %f",x,sqrt(x));                                                                                   
        return 0;
}
der gcc-Compiler wirft dann diesen Fehler zurück

Code: Alles auswählen

:~/c_prog$ gcc -o test test.c
/tmp/ccNG1hjp.o: In function `main':
/tmp/ccNG1hjp.o(.text+0x1f): undefined reference to `sqrt'
collect2: ld returned 1 exit status
Worin liegt die Ursache dafür ?
...<math.h> beinhaltet doch eigentlich die Funktion sqrt(double)...

Danke für Tipps !

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 14.08.2003 17:57:38

Hab nicht so die Erfahrung mit Programmierung unter Linux, aber das sieht mir nicht nach einem Compilerfehler, sondern nach einer Meldung des Linkers aus. Hast Du denn die ensprechende lib eingebunden (muß aber zugeben, nicht zu wissen, welche das sein sollte) Aber vielleicht findest Du ja was...
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

tylerD
Beiträge: 4068
Registriert: 10.07.2002 17:34:13
Wohnort: Halle/Saale
Kontaktdaten:

Beitrag von tylerD » 14.08.2003 17:59:33

Code: Alles auswählen

gcc -o test test.c -lm 
cu

Benutzeravatar
maikl
Beiträge: 83
Registriert: 23.11.2002 14:54:50
Wohnort: Halle
Kontaktdaten:

Beitrag von maikl » 14.08.2003 18:13:46

Code: Alles auswählen

gcc -o test test.c -lm
funktioniert !

Aber wieso ? ... was bedeutet der prefix ?? (konnte in der man-page nichts dazu finden)

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 14.08.2003 18:21:10

Die Funktion sqrt ist in nicht in der Standard C Library definiert, sondern in einer kleinen "Zubehör" Library namens libm.so ("m" wie "math" ;-)). Damit der Compiler weiss, dass er die auch noch mit reinlinken muss, brauchst Du das "-lm", der Compiler setzt dann automatisch das "lib" davor, und sucht danach.

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
maikl
Beiträge: 83
Registriert: 23.11.2002 14:54:50
Wohnort: Halle
Kontaktdaten:

Beitrag von maikl » 14.08.2003 18:42:35

Danke erstmal für die Hinweise !

Laut ANSI C ist die sqrt-Funktion in <math.h> vorgeschrieben (genauso wie pow() u.a. häufig gebrauchten Funktionen).
...das ganze finde ich daher ein wenig eigenartig...:roll:

Antworten