Usando pow () función emite error referencia indefinida en C
Pregunta
¿Por qué hace lo siguiente poco de trabajo de código en C:
int res = pow(2, 3);
printf("%d\n", res);
Si bien esto otro no?
int a = 2;
int b = 3;
int res = pow(a, b);
printf("%d\n", res);
Incluso si trato
double a = 2;
double b = 3;
double res = pow(a, b);
printf("%f\n", res);
Me aparece un
referencia indefinida a `pow '
¿Qué estoy haciendo mal?
Solución
Cuando funciona, es porque el cálculo hecho por el propio compilador (e incluido en el binario como si lo escribió)
printf("8\n");
Cuando no funciona, se debe a que la función pow
está incluido en la biblioteca matemática y la biblioteca matemática no está vinculado con el binario por defecto.
Para obtener la biblioteca matemática para ser vinculado, si su compilador gcc es, el uso
gcc ... -lm ...
Con otros compiladores, debe ser el mismo :)
pero leer la documentación
Otros consejos
sonidos undefined reference to 'pow'
como un error de enlace. Usted no está ligando en la biblioteca de matemáticas, incluso si se introduce la función pow
incluyendo <math.h>
.
Con gcc, utilizar el parámetro de línea de comandos -lm
a los eslabones de la lib matemáticas.
Usar como esto
#include <math.h>
#include <stdio.h>
int main(void)
{
for(int i = 1; i < 5; i++)
printf("pow(3.2, %d) = %lf\n", i, pow(3.2, i));
return 0;
}
Salida:
pow (3,2, 1) = 3,200000
referencia indefinida a `pow '
porque el poder a cualquier número debe tener un valor entero como potencia
pow(x,y)
where, x must be real and y must be a whole number