在 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 的默认选项。