Problem mit Bibliothek inkludieren
-
Problem:
ich verwende die Fkt. sqrt() aus der math.h Bibliothek.
Es funktioniert problemlos wenn ich die Bibliothek "math.h" am Anfang inkludiere
und die Fktion sqrt() in meiner main-Fkt aufrufe.
Sobald ich aber die sqrt()-Funktion in einer anderen Fktion im gleichen Modul
oder gar innerhalb eines anderen Moduls aufrufe kommt der Fehler, dass die
Fktion unbekannt ist.hier ist ein snippet, wo bereits der Fehler auftaucht. woran kann dies nur liegen? Vielen Dank im Voraus.
#include <stdio.h> #include <stdlib.h> #include <math.h> int test(int var); int main(void) { test(64); return EXIT_SUCCESS; } int test(int var) { int erg = 0; erg = sqrt(var); return erg; }
-
Der gcc 4.4.1 tut mit Deinem Code genau was er soll ...
-
math.h ist nicht die Bibliothek sondern der Header mit den Funktionsdeklarationen.
Wenn du noch die genaue Fehlermeldung und Compilerversion mitteilst, kann man dir auch sagen woran der Fehler liegt.
Mag sein, dass du das Einbinden von der Fließkommabibliothek vergessen hast.
-
Damit Ihr mir besser helfen könnt.
Compilerversion:
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
konkrete Fehlermeldung:
**
/tmp/cccpFDTu.o: In functiontest': main.c: (.text+0x43): undefined reference to
sqrt'
collect2: ld returned 1 exit status**
-
ld ist der Linker und der findet die Funktion (den Code von) sqrt nicht.
Du musst dem Compiler/Linker noch mitteilen, dass der die Mathematik-Library mit dazu binden soll.
Das geht mit der Compileroption -lm.
-
vielen Dank für die Info
kannst du mir noch verraten wie ich das konkret in die Kommandozeile schreibe?
gcc -o a main.c -lm math.h
geht so nicht
-
Nochmal, math.h ist keine Bibliothek.
Das ist C-Quelltext, der die Funktionsdeklarationen enthält.Das
-lm
reicht aus. Das bindet die Fließkommabibliothek mit ein.Ansonsten kannst du das Forum ja mal nach sqrt oder nach -lm durchsuchen.
-
Danke für die Auskunft