• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

KDevelop und Linkerfehler: undefined reference to ´ sqrt´

flyheli

Member
Hallo,
ich versuche ein wenig in C unter KDE zu programmieren und habe ´ Hello world´ um eine Primzahlberechnung erweitert (, dabei hat ´ Hello world´ auf Anhieb perfekt funktioniert) :
Der Code schaut dann so aus:

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int ist_primzahl(int zahl)
{
int teiler=2;

// while (teiler*teiler <= zahl)
while (teiler <= sqrt(zahl))
{
if (zahl % teiler == 0)
return(0); /* 'zahl' ist keine Primzahl */
teiler++;
}
return(1); /* 'zahl' ist eine Primzahl */
}

int main(int argc, char *argv[])
{
int zahl;

printf("Hello, world!\nHow are you\n");

for (zahl=1; zahl<=100; zahl++)
if (ist_primzahl(zahl))
printf("%d\n", zahl);


return EXIT_SUCCESS;
}

Mit: gcc Dateiname.c -lm -o Dateiname
lässt sich das Programm fehlerfrei übersetzen und läuft auch.
Unter KDevelopment lässt es sich dann fehlerfrei übersetzen, wenn man die Zeile: while (teiler <= sqrt(zahl)) durch die Zeile:
while (teiler*teiler <= zahl) ersetzt, also keine Mathematik verwendet. Verwendet man jedoch die Wurzelfunktion sqrt, so kommt der Fehler ´ undefined refence to ´ sqrt´ ´ . Also wird das libmath (-lm) nicht gefunden, glaube ich zumindest.

Eine Suche hat ergeben, daß math.h steht in usr/include/math.h/.
Wie kann ich KDevelop erklären, daß das Library eingebunden werden soll ?
Oder gibt es einen anderen Grund für den Fehler ?
Ich hoffe Ihr könnt mir helfen und danke schon einmal.
Viele Grüße
flyheli
 
OP
F

flyheli

Member
Hallo,

ist meine Frage so dämlich oder so schwierig ?
Ich habe heute den ganzen Arbeitstag damit verbracht herauszufinden, wie man ein Library in die Umgebung von KDevelop einbindet, ich habe nichts gefunden, was mir weiterhilft. Vielleicht sind meine Angaben auch nicht genau genug, also ich verwende Suse open linux 10.2 und die dort mitgelieferte KDevelop (3.5). Vielleicht liegt es auch daran, daß mein KDevelop auf Deutsch läuft und ich die entsprechenden englischen Ausdrücke Pendants nicht kenne. Ich möchte einfache C-Programme schreiben, die mir helfen meine Hardware zu überprüfen, beispielsweise einen RAM-Speichertest, u.s.w. .

Kann mir bitte jemand erklären, wie man unter KDevelop das libmath einbindet. Das es grundsätzlich vorhanden ist, zeigt mir ja der Versuch über die Kommandozeil, da funktioniert es ja.

Vielen Dank und viele Grüße
flyheli
 
OP
F

flyheli

Member
Hallo,

jetzt hab´ ich es.
Vielleicht interessiert es ja mal jemand anderes:
Man muss im rechten unteren Automakemanager, dort wo das Schlüsselsymbol ist, diese anklicken und dann den Reiter Bibliotheken auswählen. Dort mittels hinzufügen ´ -lm´ eintragen. Automake & Konsorten neu starten und dann erstellen, dann geht´s.
 
Oben