Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

No sé si estoy perdiendo algo obvio, pero parece que no soy capaz de calcular raíces cuadradas de un Variable en C; la función sqrt () sólo parece funcionar en constantes. Este es mi código:

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

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

Al ejecutar este programa, me sale el siguiente error:

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.

Sin embargo, si reemplazo el argumento de sqrt () con una constante tal como 2,0, por ejemplo, (b = sqrt(2.0)), entonces funciona bien. Se sqrt () no se supone que el trabajo con variables o algo?

Gracias por la ayuda

¿Fue útil?

Solución

necesidad de vincular con la biblioteca matemática (utilizar un '-lm' en la línea de comandos). En el caso constante, el compilador es, probablemente, ser inteligente y precomputen sqrt (2.0) (por lo que el código que se compila es esencialmente 'b = 1,414 ...;')

Otros consejos

Es probable que añadir -lm al compilar. Cuando se toma la raíz cuadrada de una constante, el compilador es optimizar el código tomando la raíz cuadrada, mientras que compila, por lo que no utiliza sqrt en absoluto.

Utilice el comando gcc -Wall -o "test2" "test2.c" -lm lo que probablemente va a arreglar esto.

Esto incluye la biblioteca matemática además de la biblioteca de tiempo de ejecución C estándar. En la mayoría de los sistemas, la biblioteca matemática es históricamente una entidad separada que debe solicitarse explícitamente.

En caso de gcc necesita para enlazar la biblioteca.

gcc filename.c -lm.

Sin embargo, en caso de g ++ sin necesidad de vincular la biblioteca por lo que este funciona bien:

g ++ filename.c -o nombre de archivo Una vez que la compilación tiene éxito.

Para ejecutar simplemente entrar en ./filename G ++. y entrar en ./a.out gcc.

Compilar con:

gcc -Wall -o test2 test2.c -lm

es necesario enlazar contra la biblioteca matemática.

incluir biblioteca matemática usando "" operador

#include " math.h "

programa de compilación con la opción -lm para la biblioteca matemática hereda Supongamos que nuestro nombre del programa es el test.c compilamos la siguiente manera

gcc test.c -lm

gcc no vincula las bibliotecas estándar por defecto. Por lo que sólo necesita hacer esto si la compilación a través de gcc:

gcc filename.c -lm .

Sin embargo, en caso de g ++ sin necesidad de vincular la biblioteca por lo que este funciona bien:

g ++ filename.c -o nombre de archivo

Esta bien que funciona para mí. Creo que hay algún problema con ur biblioteca matemática. Trate de vincular de nuevo y ver. Otro código sabia es completamente perfecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top