我有以下代码(简化为该问题的基本知识):#include<stdio.h>#include<math.h>double f1(double x){ double res = sin(x); return 0;}/* The main function */int main(void){ return 0;}使用它进行编译时,gcc test.c出现以下错误,并且我无法找出原因:/tmp/ccOF5bis.o: In function `f1':test2.c:(.text+0x13): undefined reference to `sin'collect2: ld returned 1 exit status但是,我编写了sin从main功能内部调用的各种测试程序,这些程序运行良好。我肯定在这里做错了什么-那是什么?
3 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
无论如何我还是有问题-lm
gcc -Wall -lm mtest.c -o mtest.o
mtest.c: In function 'f1':
mtest.c:6:12: warning: unused variable 'res' [-Wunused-variable]
/tmp/cc925Nmf.o: In function `f1':
mtest.c:(.text+0x19): undefined reference to `sin'
collect2: ld returned 1 exit status
我最近发现,如果您首先指定-lm,它将不起作用。顺序很重要:
gcc mtest.c -o mtest.o -lm
链接无问题
因此,您必须在之后指定库。
繁华开满天机
TA贡献1816条经验 获得超4个赞
请注意,Mac(运行Mac OS X或macOS)上的系统库包含数学函数。有一个库可以满足对内部-lm
版本的引用,但是您无需使用它-lm
来链接数学函数。导致数学库与其他数学库分离的主要问题是CPU并不总是内置浮点数。有浮点协处理器(80387等),因此有很多方法提供功能(使用软件浮点库或使用硬件,并提供不同的支持)。
- 3 回答
- 0 关注
- 1645 浏览
添加回答
举报
0/150
提交
取消