J'essaie de faire une simple calculatrice Fibonacci en C, mais lors de la compilation de gcc
, il me dit que je manque les fonctions pow et floor. Qu'est-ce qui ne va pas?
Code:
#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));
}
Sortie:
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
Vous devez compiler avec l'indicateur de lien -lm
, comme ceci:
gcc fib.c -lm -o fibo
Cela indiquera à gcc de lier votre code à la bibliothèque mathématique. Assurez-vous simplement de mettre le drapeau after les objets que vous souhaitez lier.
Ajoutez -lm à vos options de liens, car pow () et floor () font partie de la bibliothèque mathématique:
gcc fib.c -o fibo -lm
Pour le bénéfice de ceux qui liront cela plus tard, vous devez créer un lien comme le dit Fred:
gcc fib.c -lm -o fibo
Un bon moyen de déterminer la bibliothèque à lier est de consulter la page de manuel, le cas échéant. Par exemple, man pow
et man floor
vous diront tous les deux:
Lien avec -lm
.
Une explication pour relier une bibliothèque mathématique en programmation C - Relier en C
En ce qui concerne la réponse fournie par Fuzzy:
En réalité, je devais faire quelque chose de légèrement différent.
Projet -> Propriétés -> Génération C/C++ -> Paramètres -> Éditeur de liens C GCC -> Bibliothèques
Cliquez sur la petite icône d'ajout verte, tapez m et cliquez sur OK. -L est automatiquement appliqué à tout dans cette fenêtre puisqu'il s'agit d'une bibliothèque.
Trouver le point où ajouter le -lm dans Eclipse-IDE est vraiment horrible, cela m'a donc pris un certain temps.
Si quelqu'un d'autre utilise également Edlipse, voici comment ajouter la commande:
Projet -> Propriétés -> Construction C/C++ -> Paramètres -> Éditeur de liens C GCC -> Divers -> Drapeaux de l'éditeur de liens: dans ce champ, ajoutez la commande -lm