C语言编译包含math库加参数-lm

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编译包含math库加参数-lm相关的知识,希望对你有一定的参考价值。

在 Linux 系统下,C 源文件若调用了 math 库里的函数,则编译时要加上 -lm (是字母 l ,不是数字 1),表示链接到 math 库。

文件名称:1.c
#include<stdio.h> #include<math.h> //程序中要调用求平方根函数 sqrt int main(){ double a,b,c,disc,x1,x2,p,q; scanf("%lf%lf%lf",&a,&b,&c); disc = b * b - 4 * a * c; p = -b / (2.0 * a); q = sqrt(disc) / (2.0 * a); x1 = p + q,x2 = p - q; printf("x1=%7.2f\\nx2=%7.2f\\n",x1,x2); return 0; }

那么:

gcc 1.c -lm

原因

因为数学函数位于 libm.so 库文件中(这些库文件通常位于 /lib 目录下),
-lm 选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。

而 printf 为什么不需要呢?
这是因为它位于 libc.so 库文件中,
使用 libc.so 中的库函数在编译时不需要加 -lc 选项,
当然加了也不会错,因为这个选项是 gcc 的默认选项。

 

以上是关于C语言编译包含math库加参数-lm的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使在包含 math.h 并使用 -lm 链接到数学库之后我也会收到“未定义的符号:.sqrtf”

五大学科竞赛-o2 -lm编译选项

如何用makefile编译多个c文件

linux下C语言对编译报错‘expl’未定义的引用

c语言怎么求角度

链接库函数