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 x2=%7.2f ",x1,x2); return 0; }

那么:

gcc 1.c -lm

原因

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

而 printf 为什么不需要呢?
这是因为它位于 libc.so 库文件中,
使用 libc.so 中的库函数在编译时不需要加 -lc 选项,
当然加了也不会错,因为这个选项是 gcc 的默认选项。
原文地址:https://www.cnblogs.com/straybirds/p/14807036.html