2016-09-22 13 views
1

Ich habe Probleme mit der Verwendung der Funktion sqrt in C, obwohl ich die math.h-Header verwenden und ich verwende Doppelgänger. Beim Versuch, den folgenden Code auszuführen:Fehler bei der Verwendung von sqrt in C

#include <stdio.h> 
#include <math.h> 
int main(int argc, char **argv) 
{ 
int J = 1000000; 
sieve(J); 
} 


int sieve(int J) 
{ 
int P[J+1]; P[0] = 0; P[1] = 0; int i; 

for (i = 2; i <= J; i++) //set all values of P to 1 initially 
    { P[i] = 1;} 

int p = 2; 

double y = (double) J; 
double J2 = sqrt(y); 
} 

I receieve den Fehler:

/tmp/ccAhS08O.o: In function 'sieve': 
test.c:(.text+0xf8): undefined reference to `sqrt' 
collect2: error: ld returned 1 exit status 
+0

Mögliche Duplikat von [C zu kompilieren - undefined reference to sqrt (oder andere mathematische Funktionen)] (http://stackoverflow.com/questions/5248919/c-undefined-reference-to-sqrt-or-other-mathematical-functions) –

Antwort

4

Bei allen aktuellen Versionen von GCC, Sie müssen beim Kompilieren explizit auf die Math-Bibliothek verweisen, da sie nicht automatisch mit dem Rest der Standard-C-Bibliothek verknüpft ist).

Wenn Sie in der Befehlszeile mit dem Befehl gcc oder g ++ kompilieren, würden Sie dies erreichen, indem Sie -lm am Ende des Befehls setzen.

Zum Beispiel: gcc -o foo foo.c -Im

Oder Sie könnten die Flagge in der Makefile, das Sie verwenden

2

Sie benötigen Mathe-Bibliothek zu verknüpfen: -lm

cc -o out main.c -lm 
Verwandte Themen