Referência indefinida para `pow ‘e` floor’

Eu estou tentando fazer uma simples calculadora de fibonacci em C, mas ao compilar o gcc me diz que estou perdendo as funções de pow e floor. O que está errado?

Código:

 #include  #include  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)); } 

Saída:

 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 

    Você precisa compilar com o link flag -lm , assim:

     gcc fib.c -lm -o fibo 

    Isto irá dizer ao gcc para ligar o seu código com a biblioteca de matemática. Só não se esqueça de colocar a bandeira após os objects que você deseja vincular.

    Adicione -lm às suas opções de link, pois pow () e floor () fazem parte da biblioteca de matemática:

     gcc fib.c -o fibo -lm 

    Para o benefício de quem lê isso mais tarde, você precisa se conectar a ele, como Fred disse:

    gcc fib.c -lm -o fibo

    Uma boa maneira de descobrir qual biblioteca você precisa vincular é verificando a página man, se existir. Por exemplo, “man pow” e “man floor” dirão:

    Link com -lm

    Em relação à resposta fornecida por Fuzzy:

    Eu realmente tive que fazer algo um pouco diferente.

    Projeto -> Propriedades -> C / C ++ Build -> Configurações -> GCC C Linker -> Bibliotecas

    Clique no pequeno ícone Adicionar verde, digite me clique em OK. Tudo nesta janela automaticamente tem -l aplicado a ele, pois é uma biblioteca.

    Para encontrar o ponto onde adicionar o -lm no Eclipse-IDE é realmente horrível, então demorei um pouco.

    Se alguém também usa o Edlipse, aqui está a maneira de adicionar o comando:

    Projeto -> Propriedades -> C / C ++ Build -> Configurações -> GCC C Linker -> Miscelânea -> Linker flags: neste campo adicione o comando -lm