Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich weiß nicht, ob ich etwas offensichtlich fehlt bin, aber es scheint, dass ich nicht in der Lage Quadratwurzeln einer Variable berechnen in C; die Funktion sqrt () scheint nur auf Konstanten zu arbeiten. Dies ist mein Code:

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

int main()
{
    double a = 2.0;
    double b = sqrt(a);
    printf("%f", b);
    return 0;
}

Als ich dieses Programm ausführen, ich die folgende Fehlermeldung erhalten:

gcc -Wall -o "test2" "test2.c" (in directory: /home/eddy/Code/euler)
/tmp/ccVfxkNh.o: In function `main':
test2.c:(.text+0x30): undefined reference to `sqrt'
collect2: ld returned 1 exit status
Compilation failed.

Wenn ich jedoch das Argument in sqrt () mit einem konstanten wie 2.0 zum Beispiel (b = sqrt(2.0)) ersetzen, dann funktioniert es gut. Ist sqrt () nicht anzunehmen Arbeit mit Variablen oder so etwas?

Danke für die Hilfe

War es hilfreich?

Lösung

Sie müssen Verbindung mit der Mathematik-Bibliothek (mit einem ‚-Im‘ auf der Kommandozeile). Im ständigen Fall wird der Compiler wahrscheinlich ist klug und precomputing sqrt (2.0) (so dass der Code, der im Wesentlichen ist kompiliert wird 'b = 1,414 ...;')

Andere Tipps

Sie müssen wahrscheinlich -lm hinzufügen, wenn Sie kompilieren. Wenn Sie die Quadratwurzel einer konstanten nehmen, wird der Compiler den Code zu optimieren, indem die Quadratwurzel, während es kompiliert, so dass es nicht sqrt überhaupt zu verwenden ist.

Mit dem Befehl gcc -Wall -o "test2" "test2.c" -lm, die dies wahrscheinlich beheben.

Dazu gehört auch die Mathematik-Bibliothek neben der Standard-C-Laufzeitbibliothek. Auf den meisten Systemen ist die Mathematik-Bibliothek historisch eine separate Einheit, dass der Bedarf explizit angefordert werden.

Bei gcc müssen Sie die Bibliothek verbinden.

gcc filename.c -Im.

Jedoch bei g ++ keine Notwendigkeit, die Bibliothek zu verknüpfen, so die feine funktionieren:

g ++ filename.c -o Dateiname Sobald Kompilierung erfolgreich ist.

Um einfach eingeben ./filename in G läuft ++. und geben Sie ./a.out in Gcc.

Compile mit:

gcc -Wall -o test2 test2.c -lm

Sie müssen Verbindung gegen die Mathematik-Bibliothek.

umfasst mathematische Bibliothek mit "" Operator

#include " math.h "

Kompilierungsprogramm mit -lm Option für inherit Mathematik-Bibliothek nähme an unserem Programmname ist test.c die wir wie folgt zusammenstellen

gcc test.c -lm

gcc Link nicht die Standard-Bibliotheken standardmäßig. So dass Sie nur tun müssen, um diese über gcc bei der Compilierung:

gcc filename.c -Im .

Jedoch bei g ++ keine Notwendigkeit, die Bibliothek zu verknüpfen, so die feine funktionieren:

g ++ filename.c -o Dateiname

Dies funktioniert gut für mich. Ich denke, es gibt ein Problem mit ur Mathematik-Bibliothek ist. Versuchen Sie es erneut und sehen zu verknüpfen. Andere weisen Code ist ganz perfekt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top