在linux下编写以下程序
#include <math.h>
#include <stdio.h>
int main(void)
{
double pi = 3.1416;
printf("sin(pi/2)=%f\nln1=%f\n", sin(pi/2), log(1.0));
return 0;
}
使用gcc编译会提示出现以下问题:
gcc fun_1.c -o fun_1
意思是找不到sin这个函数,也就是没有找到math.h这个头文件。
原因是gcc在编译程序时会到系统默认的搜索路径/lib或/usr/lib下进行查找库文件。在linux平台上最广泛使用的C函数库是glibc,其中包括c标准库的实现。几乎所有的c程序都要调用glibc的库函数。glibc提供一组头文件和一组库文件,最基本的、最常用的C标准库函数和系统函数在libc.so库文件中。
gcc默认会在libc.so库文件中查找库函数,因此使用了libc.so中的库函数在编译时不需要加-lc选项,当然加了也不算错。
而使用math.h中声明的库函数有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中,-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。
因此编译只需要使用下面的命令即可,
gcc fun_1.c -lm -o fun_1