Domanda

    

Questa domanda ha già una risposta qui:

         

Non so se mi manca qualcosa ovvio, ma sembra che io sono in grado di calcolare le radici quadrate di un variabile in C; la funzione sqrt () sembra solo a lavorare su costanti. Questo è il mio codice:

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

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

Quando ho eseguito questo programma, ottengo il seguente errore:

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.

Tuttavia, se sostituisco l'argomento in sqrt () con una costante come 2.0, ad esempio, (b = sqrt(2.0)), quindi funziona benissimo. È sqrt () non dovrebbe funzionare con le variabili o qualcosa del genere?

Grazie per l'aiuto

È stato utile?

Soluzione

È necessario legame con la libreria matematica (utilizzare un '-lm' sulla riga di comando). Nel caso costante, il compilatore è probabilmente di essere intelligente e precomputing sqrt (2.0) (in modo che il codice che viene compilato è essenzialmente 'b = 1.414 ...;')

Altri suggerimenti

È probabilmente bisogno di aggiungere -lm quando si compila. Quando si prende la radice quadrata di una costante, il compilatore ottimizza il codice prendendo la radice quadrata mentre compila, quindi non utilizza sqrt affatto.

Utilizzare il comando gcc -Wall -o "test2" "test2.c" -lm che probabilmente risolvere il problema.

Questo include la libreria matematica, oltre alla libreria di runtime C standard. Sulla maggior parte dei sistemi, la libreria matematica è storicamente un'entità separata che deve essere esplicitamente richiesto.

In caso di gcc è necessario collegare la libreria.

gcc filename.c -lm.

Tuttavia, in caso di g ++ non c'è bisogno di collegare la libreria in modo questo funzionerà bene:

g ++ filename.c -o filename Una volta che la compilazione è successo.

Per eseguire semplicemente ./filename entrare in G ++. e inserire ./a.out in GCC.

Compila con:

gcc -Wall -o test2 test2.c -lm

È necessario collegare contro la libreria matematica.

includere libreria matematica usando "" operatore

#include " math.h "

programma di compilazione utilizzando l'opzione -lm per ereditare libreria matematica Supponiamo che il nostro nome del programma è test.c la compiliamo come segue

gcc test.c -lm

gcc non collega le librerie standard di default. Quindi non vi resta che fare questo se la compilazione via gcc:

gcc filename.c -lm .

Tuttavia, in caso di g ++ non c'è bisogno di collegare la libreria in modo questo funzionerà bene:

g ++ filename.c -o filename

Questo funziona bene per me. Penso che ci sia qualche problema con ur libreria matematica. Provare il collegamento di nuovo e vedere. Altro codice saggio è del tutto perfetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top