Referencia indefinida a `pow' y `floor'

Resuelto kettlepot asked hace 12 años • 6 respuestas

Estoy intentando hacer una calculadora de Fibonacci simple en C pero al compilar gccme dice que me faltan las funciones pow y floor. ¿Qué ocurre?

Código:

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

int fibo(int n);

int main() {
        printf("Fib(4) = %d", fibo(4));
        return 0;
}

int fibo(int n) {
        double phi = 1.61803399;

        return (int)(floor((float)(pow(phi, n) / sqrt(5)) + .5f));
}

Producción:

gab@testvm:~/work/c/fibo$ gcc fib.c -o fibo
/tmp/ccNSjm4q.o: In function `fibo':
fib.c:(.text+0x4a): undefined reference to `pow'
fib.c:(.text+0x68): undefined reference to `floor'
collect2: ld returned 1 exit status
kettlepot avatar Dec 30 '11 00:12 kettlepot
Aceptado

Necesitas compilar con el indicador de enlace -lm, así:

gcc fib.c -lm -o fibo

Esto le indicará a gcc que vincule su código con la biblioteca matemática. Sólo asegúrate de poner la bandera después de los objetos que deseas vincular.

Fred avatar Dec 29 '2011 17:12 Fred

Agregue -lm a sus opciones de enlace, ya que pow() y floor() son parte de la biblioteca matemática:

gcc fib.c -o fibo -lm
Yann Droneaud avatar Dec 29 '2011 17:12 Yann Droneaud