Pregunta

Al intentar llamar funciones en math.h, recibo errores de enlace como los siguientes

undefined reference to sqrt

Pero estoy haciendo un #include <math.h>
Estoy usando gcc y compilando de la siguiente manera:

gcc -Wall -D_GNU_SOURCE blah.c -o blah

¿Por qué el vinculador no puede encontrar la definición de sqrt?

¿Fue útil?

Solución

Agregue -lm al comando cuando llame a gcc:
gcc -Wall -D_GNU_SOURCE bla.c -o bla -lm

Esto le indicará al vinculador que se vincule con la biblioteca matemática.Incluir math.h le dirá al compilador que las funciones matemáticas como sqrt() existen, pero están definidas en una biblioteca separada, que el vinculador debe empaquetar con su ejecutable.

Como señaló FreeMemory, la biblioteca se llama libm.a.En sistemas tipo Unix, la regla para nombrar bibliotecas es lib[blah].a .Luego, si desea vincularlos a su ejecutable, use -l[blah] .

Otros consejos

Debe vincular la biblioteca matemática explícitamente.Agregar -lm a las banderas que estás pasando a gcc para que el vinculador sepa vincular libm.a

Adjuntar -lm hasta el final del comando gcc para vincular la biblioteca matemática:

gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

Para que las cosas se vinculen correctamente, ¡el orden de los indicadores del compilador es importante!Específicamente, el -lm debe ser colocado al final de la línea.

Si te preguntas por qué el math.h La biblioteca debe incluirse al compilar en C, consulte esta explicación aquí.

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