valor trigonometricas redondeo raiz programacion programa matematicas funciones funcion float ejemplos cuadrada absoluto c linker-errors undefined-reference

trigonometricas - referencia indefinida a sqrt(u otras funciones matemáticas)



redondeo en c (4)

Puede encontrar que tiene que vincularse con las bibliotecas matemáticas en cualquier sistema que esté utilizando, algo así como:

gcc -o myprog myprog.c -L/path/to/libs -lm ^^^ - this bit here.

La inclusión de encabezados le permite a un compilador conocer las declaraciones de funciones, pero no necesariamente se vincula automáticamente con el código requerido para realizar esa función.

De lo contrario, deberá mostrarnos su código, su comando de compilación y la plataforma en la que está ejecutando (sistema operativo, compilador, etc.).

El siguiente código compila y enlaza bien:

#include <math.h> int main (void) { int max = sqrt (9); return 0; }

Solo tenga en cuenta que algunos sistemas de compilación dependen del orden en que se dan las bibliotecas en la línea de comando. Con eso, quiero decir que pueden procesar las bibliotecas en secuencia y solo usarlas para satisfacer símbolos no resueltos en ese punto de la secuencia.

Entonces, por ejemplo, dados los comandos:

gcc -o plugh plugh.o -lxyzzy gcc -o plugh -lxyzzy plugh.o

y plugh.o requiere algo de la biblioteca xyzzy , el segundo puede no funcionar como esperabas. En el punto en el que lista la biblioteca, no hay símbolos sin resolver para satisfacer.

Y cuando aparecen los símbolos no resueltos de plugh.o , es demasiado tarde.

Tengo este código simple:

max = (int) sqrt (number);

y en el encabezado tengo:

#include <math.h>

Pero la aplicación todavía dice referencia indefinida a sqrt . ¿Ves algún problema aquí? Parece que todo debería estar bien.


Solo #include <math.h> el #include <math.h> en el archivo fuente c y -lm en Makefile al final funcionará para mí.

gcc -pthread -o p3 p3.c -lm


Supongo que importó math.h con #include <math.h>

Entonces, la única otra razón que puedo ver es que falta información de enlace . Debe vincular su código con la opción -lm .

Si simplemente intenta compilar un archivo con gcc, simplemente agregue -lm a su línea de comando; de lo contrario, brinde información sobre su proceso de construcción.


Tuve el mismo problema, pero simplemente lo resolví agregando -lm después del comando que ejecuta mi código. Ejemplo. gcc code.c -lm