Référence non définie à "pow" et "floor"

j'essaie de faire une simple calculatrice fibonacci en C mais en compilant gcc me dit que je manque les fonctions pow et floor. Quel est le problème?

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
104
demandé sur Yann Droneaud 2011-12-29 21:50:48

5 réponses

vous devez compiler avec le drapeau de lien -lm , comme ceci:

gcc fib.c -lm -o fibo

cela va dire à gcc de lier votre code avec la lib mathématique. Juste être sûr de mettre le drapeau après les objets que vous souhaitez lier.

208
répondu Fred 2018-07-28 20:25:58

Add-Lm à vos options de lien, puisque pow () et floor () font partie de la bibliothèque de mathématiques:

gcc fib.c -o fibo -lm
24
répondu Yann Droneaud 2016-10-01 15:44:20

pour le bénéfice de quiconque lisant ceci plus tard, vous devez lier contre elle comme Fred a dit:

gcc fib.c -lm -o fibo

une bonne façon de savoir quelle bibliothèque vous devez créer un lien est de vérifier la page de manuel si une bibliothèque existe. Par exemple, man pow et man floor vous diront tous les deux:

lien avec -lm .

Une explication pour la liaison de la bibliothèque math dans la programmation en C - la Liaison C

9
répondu spike.barnett 2018-09-27 17:22:18

En ce qui concerne la réponse fournie par Flous:

en fait, j'ai dû faire quelque chose de légèrement différent.

Projet -> Propriétés -> C/C++ Build -> Paramètres -> GCC C Linker -> Bibliothèques

cliquez sur l'icône petit vert Ajouter, tapez m et appuyez sur ok. Tout dans cette fenêtre automatiquement a -l appliqué depuis c'est une bibliothèque.

8
répondu Greg K 2014-06-23 11:00:38

pour trouver le point où ajouter le-lm dans Eclipse-IDE est vraiment horrible, donc ça m'a pris du temps.

si quelqu'un d'autre utilise aussi Edlipse, voici comment ajouter la commande:

Projet -> Propriétés -> C/C++ Build -> Paramètres -> GCC C Linker -> Miscelleaneous -> Linker drapeaux: dans ce champ d'ajouter la commande - "lm

6
répondu Fuzzy 2013-10-16 10:15:17