[C] undefined reference to 'sqrt '

wurzelsepp

Ensign
Registriert
Jan. 2005
Beiträge
217
hallo!

hab jetz n buch bekommen (klaus schröder - c bei addison wesley) mit dem ich eigentlich ein bisschen C lernen wollte. soweit so gut: denn die ersten kleinen hallo-welt-programme funktionieren auch schon.

aber bei einem programm, wo man die quadratwurzelfunktion braucht gabs n kleines problem: nämlich die fehlermeldung, die im titel genannt ist. und es nicht so, dass ich nicht die math-header-datei eingebunden hätte..! ich hab dann sogar die lösung ausm buch probiert (und die müsste ja gehen), worauf das gleiche problem wieder aufgetreten ist.

kann an das an ner fehlenden oder beschädigten bibliothek liegen oder sowas die richtung? bzw woran könnt es liegen und wie kann ich das beheben?!
 
Tja wie wärs, wenn du mal den Code posten würdest? :D
 
jo sorry ;)

Code:
# include <stdio.h>
# include <math.h>

int main (void) /* ---- bewmass.c ---- */
{
   double c = 3e8;
   double v;
   double start = 0.99;
   double incr = 0.001;
   double m;
   double m0 = 1.;
   int i;
   printf ("\tVielfaches\tMasse\n\tvon c\n\n");
   for (i = 0 ; i < 10 ; ++i)
   {
      v = start * c;
      m = m0 / sqrt (1 - (v / c) * (v / c));
      printf ("\t%5.3lf\t\t%6.2lf\n", start, m);
      start += incr;
   }
   return 0;
}
 
Ich benutze als IDE DevC++ 4.9.9.2, bei mir kompiliert Dein Code von oben ohne Probleme, ausgeführt wird er auch (wobei ich die REchnung an sich nicht geprüft habe).

Welche IDE benutzt Du? Welcher Kompiler ist das?

Poste mal bitte die genaue Fehlermeldung des Kompilers, d. h. am Besten das ganze Kompiler-Log.
 
ich nehme an dass er mit linux arbeitet und daher den gcc verwendet. richtig?

du mußt es mit -lm linken also :

gcc -lm datei.c

"man sqrt" hätte dir (und könnte in Zukunft) helfen können ;)
 
hi el guapo!

also ich benutze einfach den befehl gcc um das ganze zu kompilieren. eine entwicklungsumgebung hab ich eigentlich nicht (schreib den code halt mit nem editor und kompiliers dann)...

edit: wie ich grad gesehen hab, is die IDE für win32 -> ich benutz eigentlich linux, wie bacchisio richtig bemerkt hat.

danke jedenfalls..! ähm
@bacchisio: warum muss ich das linken?!
 
Zuletzt bearbeitet:
damit wird die math bibliothek gelinkt damit man mit den Befehlen der header Datei was anfangen kann
 
viel dank..!

ähm nochwas: die option "-lm" - linkt die alle headerdateien, die ich bei meinen includes angegeben hab? dh ich versteh nicht, warum er die <stdio.h> kennt, aber die <math.h> nicht..?! vielleicht kannst du s mir ja verraten... dh wohin linkt der gcc sich denn da oder wie darf ich das verstehen?

würd mich echt sehr interessieren..!
aber jedenfalls mal danke für deine hilfe!
 
-lm linkt nur die libm Bibliothek (math)

du kannst dich im /usr/lib Ordner umsehen um zu sehen was es dort alles gibt :)


die std braucht nicht extra gelinkt zu werden, bei anderen compilern/linkern z.B. die mathe bibliothek auch nicht. Je komplexer dein Programm wird im Hinblick auf eingebundenen bibliotheken je wahrscheinlicher wird es dass du eine option mitgeben mußt (weiteres beispiel -lGL für opengl). In diesen Fällen lohnt es sich ein makefile zu erzeugen
 
hmm welche IDEs gibts denn eigentlich für linux, die für mich als anfänger geeignet wären? oder is das eigentlich gar nicht unbedingt nötig?

wie macht ihr (wenn ihr unter linux c programmiert) denn das?!
 
Zurück
Oben