129 votes

Undefined reference to `pow " et "plancher"

Je suis en train de faire un simple fibonacci calculatrice en C, mais lors de la compilation d' gcc me dit que je manque le pow et le plancher fonctions. 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

254voto

Fred Points 2681

Vous avez besoin de compiler avec le drapeau -lm, comme ceci:

gcc fib.c -lm -o fibo

Cela va demander à gcc de lien de votre code à l'encontre de la lib math. Juste être sûr de mettre le drapeau après les objets que vous souhaitez lier.

25voto

ydroneaud Points 1960

Ajoutez -lm à votre lien d'options, depuis pow() et le plancher() font partie de la bibliothèque de mathématiques:

 gcc fib.c -o fibo -lm

8voto

Greg K Points 194

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

J'ai effectivement eu à 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 le peu de vert icône ajouter, tapez m et appuyez sur ok. Tout dans cette fenêtre automatiquement a -l appliqué depuis c'est une bibliothèque.

7voto

Fuzzy Points 31

Pour trouver le point où ajouter le-lm dans Eclipse IDE est vraiment horrible, donc il m'a fallu un peu de temps.

Si quelqu'un d'autre utilise également Edlipse, voici la façon de comment ajouter de 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X