Riferimento indefinito a `pow ‘e` floor’

Sto cercando di creare una semplice calcolatrice di Fibonacci in C, ma durante la compilazione gcc mi dice che mi mancano le funzioni Pow e Floor. Cosa c’è che non va?

Codice:

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

Produzione:

 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 

    Devi compilare il link flag -lm , in questo modo:

     gcc fib.c -lm -o fibo 

    Questo dirà a gcc di colbind il tuo codice alla lib di matematica. Assicurati di mettere la bandiera dopo gli oggetti che vuoi colbind.

    Aggiungi -lm alle opzioni di collegamento, dal momento che pow () e floor () fanno parte della libreria matematica:

     gcc fib.c -o fibo -lm 

    Per il beneficio di chiunque lo stia leggendo in seguito, è necessario collegarsi ad esso come Fred ha detto:

    gcc fib.c -lm -o fibo

    Un buon modo per scoprire quale libreria è necessario colbind è controllando la pagina man, se ne esiste una. Ad esempio, “man pow” e “man floor” ti diranno entrambi:

    Collegamento con -lm.

    Per quanto riguarda la risposta fornita da Fuzzy:

    In realtà dovevo fare qualcosa di leggermente diverso.

    Progetto -> Proprietà -> C / C ++ Build -> Impostazioni -> GCC C Linker -> Librerie

    Fai clic sulla piccola icona verde aggiungi, digita m e premi ok. Tutto in questa finestra ha automaticamente l’applicazione -l ad esso poiché è una libreria.

    Trovare il punto in cui aggiungere il -lm in Eclipse-IDE è davvero orribile, quindi mi ci è voluto del tempo.

    Se qualcun altro usa anche Edlipse, ecco come aggiungere il comando:

    Progetto -> Proprietà -> C / C ++ Build -> Impostazioni -> GCC C Linker -> Miscellaneo -> Flag del linker: in questo campo aggiungi il comando -lm