Gab*_*lli 117 c gcc undefined-reference
我正在尝试在C中制作一个简单的斐波那契计算器,但在编译时gcc告诉我,我错过了战俘和地板功能.怎么了?
码:
#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));
}
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
Fre*_*red 228
您需要使用链接标志进行编译-lm,如下所示:
gcc fib.c -lm -o fibo
Run Code Online (Sandbox Code Playgroud)
这将告诉gcc将您的代码与数学库链接.只需确保将标志放在要链接的对象之后.
Yan*_*aud 24
添加-lm到您的链接选项,因为pow()和floor()是数学库的一部分:
gcc fib.c -o fibo -lm
Run Code Online (Sandbox Code Playgroud)
为了以后阅读本文的任何人的利益,你需要链接它,因为弗雷德说:
gcc fib.c -lm -o fibo
Run Code Online (Sandbox Code Playgroud)
找出需要链接的库的一个好方法是检查手册页是否存在.例如,man pow并且man floor都会告诉你:
链接-lm.
关于在C编程中链接数学库的解释 - 在C中链接
小智 8
关于Fuzzy提供的答案:
我实际上必须做一些稍微不同的事情.
项目 - >属性 - > C/C++构建 - >设置 - > GCC C链接器 - >库
单击小绿色添加图标,键入m并单击确定.由于它是一个库,因此该窗口中的所有内容都会自动应用-l.
小智 6
要找到在Eclipse-IDE中添加-lm的地方真的太可怕了,所以我花了一些时间.
如果其他人也使用Edlipse,这里是添加命令的方法:
项目 - >属性 - > C/C++构建 - >设置 - > GCC C链接器 - > Miscelleaneous - >链接器标志:在此字段中添加命令-lm