Неопределенная ссылка на " pow " и "floor"
Я пытаюсь сделать простой калькулятор Фибоначчи на C, но при компиляции gcc
говорит мне, что мне не хватает функций pow и floor. Что случилось?
код:
#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));
}
выход:
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
5 ответов
вам нужно скомпилировать с флагом ссылке -lm
, например:
gcc fib.c -lm -o fibo
это скажет gcc связать ваш код с математическим lib. Просто не забудьте поставить флаг после объекты, которые вы хотите связать.
добавить-lm в параметры ссылки, так как pow () и floor () являются частью математической библиотеки:
gcc fib.c -o fibo -lm
в интересах тех, кто читает это позже, вам нужно связать с ним, как сказал Фред:
gcc fib.c -lm -o fibo
один хороший способ узнать, какую библиотеку вам нужно связать, - проверить справочную страницу, если она существует. Например, man pow
и man floor
оба скажут вам:
ссылке -lm
.
объяснение связывания математической библиотеки в программировании на C -связывание в C
в отношении ответа, предоставленного Fuzzy:
на самом деле я должен был сделать что-то немного другое.
проект - > свойства - > сборка C/C++ - > настройки - > Компоновщик GCC C - > библиотеки
нажмите маленький зеленый значок Добавить, введите m и нажмите ok. Все в этом окне автоматически-L применяется к нему, так как это библиотека.
чтобы найти точку, где добавить-lm в Eclipse-IDE, действительно ужасно, поэтому мне потребовалось некоторое время.
Если кто-то еще также использует Edlipse, вот как добавить команду:
Project - > Properties - > C / C++ Build - > Settings - > gcc c Linker - > Miscelleaneous - > флаги компоновщика: в это поле добавьте команду-lm