Неопределенная ссылка на `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
743   5  

5 ответов:

вам нужно скомпилировать с флагом ссылке -lm, например:

gcc fib.c -lm -o fibo

это скажет gcc связать ваш код с математической библиотекой. Просто не забудьте поставить флаг после объекты, которые вы хотите связать.

добавить-lm к вашим параметрам ссылки, так как pow () и floor () являются частью математической библиотеки:

gcc fib.c -o fibo -lm

для тех, кто читает это позже, вам нужно связать против него, как сказал Фред:

gcc fib.c -lm -o fibo

один хороший способ узнать, какую библиотеку вам нужно связать, - это проверить man-страницу, если она существует. Например, man pow и man floor оба скажут вам:

ссылке -lm.

объяснение связывания математической библиотеки в программировании на C -связывание в C

в отношении ответа, предоставленного Fuzzy:

на самом деле я должен был сделать что-то немного другое.

Project - > Properties - > C/C++ Build - > Settings - > gcc c Linker - > Libraries

нажмите на маленький зеленый значок Добавить, введите m и нажмите кнопку ОК. Все в этом окне автоматически имеет-l применяется к нему, так как это библиотека.

чтобы найти точку, где добавить-lm в Eclipse-IDE действительно ужасно, поэтому мне потребовалось некоторое время.

Если кто-то еще также использует Edlipse, вот как добавить команду:

Project - > Properties - > C / C++ Build - > Settings - > gcc c Linker - > Misselleaneous - > флаги компоновщика: в этом поле добавьте команду-lm

Comments

    Ничего не найдено.