¿Por qué recibo un error de “referencia indefinida a sqrt” aunque incluyo el encabezado math.h?

Soy nuevo en C y tengo este código:

#include  #include  int main(void) { double x = 0.5; double result = sqrt(x); printf("The square root of %lf is %lf\n", x, result); return 0; } 

Pero cuando compilo esto con:

 gcc test.c -o test 

Me sale un error como este:

 /tmp/cc58XvyX.o: In function `main': test.c:(.text+0x2f): undefined reference to `sqrt' collect2: ld returned 1 exit status 

¿Por qué pasó esto? ¿ sqrt() no está en el archivo de encabezado math.h ? Obtengo el mismo error con cosh y otras funciones trigonométricas. ¿Por qué?

La biblioteca matemática debe estar vinculada al construir el ejecutable. Cómo hacer esto varía según el entorno, pero en Linux / Unix, simplemente agregue -lm al comando:

 gcc test.c -o test -lm 

La biblioteca matemática se llama libm.so , y la opción de comando -l asume un prefijo lib y .a sufijo .a o .so .

Debes vincular el con la opción del enlazador -lm

Necesitas comstackr como

 gcc test.c -o test -lm 

gcc (Not g ++) históricamente no incluiría por defecto las funciones matemáticas mientras se vincula. También se ha separado de libc en una biblioteca separada libm. Para vincularlas con estas funciones, debe avisar al vinculador que incluya la opción de biblioteca -l enlazador seguida del nombre de la biblioteca m tanto -lm .

Es probable que se trate de un error de enlazador. Agregue el -lm para especificar que desea establecer un vínculo con la biblioteca matemática C estándar ( libm ) que tiene la definición para esas funciones (el encabezado solo tiene la statement para ellas, vale la pena buscar la diferencia).

Porque no le dijiste al vinculador sobre la ubicación de la biblioteca matemática . Comstackr con gcc test.c -o test -lm

Debe vincular el archivo de encabezado math.h con su código. Puede hacer esto escribiendo -lm después de su comando.

Agregar encabezado:

#include

Nota: use abs (), a veces en el momento de la evaluación sqrt () puede tomar valores negativos que dejan un error de dominio.

abs () – proporciona valores absolutos;

ejemplo, abs (-3) = 3

Incluya -lm al final de su comando durante el tiempo de comstackción:

gcc -lm