2016-04-27 11 views
1

Ich mache eine benutzerdefinierte Funktion innerhalb meines Programms und wenn ich versuche zu verwenden die pow Funktion, der Compiler gibt mir einen Fehler und sagt, dass es eine undefined reference to pow() gibt. Ich habe ähnliche Probleme gesehen und die Lösung war, -lm hinzuzufügen, wenn ich kompiliere. Ich habe das gemacht und doch hat es immer noch das Problem. Es ist nur auf meinen benutzerdefinierten Funktionen passiert, weil es vorher funktionierte, als ich gerade die pow in die main Funktion meines Codes setzte. Es funktioniert auch, wenn der Exponent 2 statt 0.5 ist. Danke für deine Hilfe.Wenn ich versuche, meinen Code zu kompilieren, erhalte ich die Fehlermeldung "undefined reference to pow()", auch wenn ich mit '-lm' verknüpfe

#include<math.h> 

float standard_deviation (float variance) { 

     float deviation = 0.0; 
     deviation = pow(variance, 0.5); 

     return deviation; 
} /* mean */ 


float standard_error (float standard_deviation, int number_of_elements) { 

    return standard_deviation/pow(number_of_elements, 0.5); 

} /* mean */ 
+5

Wie erstellen Sie Ihr Programm? Von der Befehlszeile? Wo hast du auf der Kommandozeile '-lm' abgelegt? Da die Reihenfolge wichtig ist, müssen die Bibliotheken nach Quell-/Objektdateien sein. –

+2

Zeigen Sie die (einzelnen) Befehle an, die Sie zum Kompilieren und Verknüpfen verwenden. Besser noch, machen Sie ein vollständig eigenständiges Beispiel, das dieses Problem zeigt. – Evert

+2

@steven Carlisle, was ist dein Compiler? – shafeeq

Antwort

0

Da Sie verwenden float statt double, sollten Sie powf verwenden.

deviation = powf(variance, 0.5f); 
return standard_deviation/powf((float)number_of_elements, 0.5f); 

Kompilieren Sie mit -lm.

+0

also habe ich versucht, es in powf zu ändern und dann sagte es nur, dass es einen undefinierten Bezug auf powf hatte –

+0

@StevenCarlisle hast du mit '-lm' kompiliert? –

+0

big_statistics_funtion: big_statistics_function.c gcc -o big_statistics_function big_statistics_function.c -lm Ich habe die -lm. Ich weiß nicht, ob das das ist, was du meinst oder nicht, aber es ist die Sache, die wir in der Klasse jedes Mal ohne Probleme gemacht haben. –

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

float standard_deviation (float variance) 
{ 
    float deviation = 0.0; 
    deviation = pow(variance, 0.5); 
    return deviation; 
} /* mean */ 

float standard_error (float standard_deviation, int number_of_elements) 
{ 
    return standard_deviation/pow(number_of_elements, 0.5); 
} /* mean */ 

int main(int argc, char *argv[]) 
{ 
     printf ("%f\n", standard_deviation (1.0)); 
     return 0; 
} 

kompiliert ohne Probleme, wenn wie folgt aufgerufen:

gcc test10.c -o test10 -lm 

Wenn Sie .c kompilieren ersten Dateien .o, müssen Sie -Im erst in der letzten Verknüpfungsstufe die ausführbare Datei zu erzeugen.