首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义对“`floor”和“`floor”的引用

未定义对“`floor”和“`floor”的引用
EN

Stack Overflow用户
提问于 2011-12-30 01:50:49
回答 6查看 218.2K关注 0票数 133

我正试着用C语言做一个简单的斐波纳契计算器,但是在编译时,gcc告诉我我遗漏了幂和底函数。怎么了?

代码:

代码语言:javascript
复制
#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));
}

输出:

代码语言:javascript
复制
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
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-12-30 01:52:40

您需要使用链接标志-lm进行编译,如下所示:

代码语言:javascript
复制
gcc fib.c -lm -o fibo

这将告诉gcc将您的代码链接到数学库。只需确保将标志放在要链接的对象的后面即可。

票数 259
EN

Stack Overflow用户

发布于 2011-12-30 01:52:53

将-lm添加到链接选项中,因为pow()和floor()是数学库的一部分:

代码语言:javascript
复制
gcc fib.c -o fibo -lm
票数 25
EN

Stack Overflow用户

发布于 2015-05-15 19:36:46

为了方便以后阅读本文的任何人,您需要像Fred所说的那样链接到它:

代码语言:javascript
复制
gcc fib.c -lm -o fibo

找出需要链接的库的一个好方法是查看手册页。例如,man powman floor都会告诉您:

链接到-lm

C程序设计中连接数学库的说明-- Linking in C

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8671366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档