您的位置:首页 > 运维架构 > Linux

Linux c 使用数学函数库出现问题.

2013-05-08 14:35 253 查看
先编写一个main.c 文件 代码如下:

#include <stdio.h>
#include <math.h>

int main()
{
printf("hello world\n");
double pi=3.1415926;
printf("sin(pi/2)=%f",sin(pi/2));
return 0;
}

gcc main.c -o main 这样编译报错。。。



gcc main.c -lm -o main

其实,通过这个小问题,我们可以学习更多的知识。

思考如下:

明明是包含了math.h头文件的,怎么还显示sin没有定义呢?

原来,gcc的sin函数是定义在libm.so里面了。

用-l选项定义指定的路径。不填写的话默认是/lib和/usr/lib内。

因为linux下所有的函数库都是以lib开头的。所以除去头和尾,那么m就是代表libm.so

(m是库名,libm.so是库文件名)

在使用“ -l”参数时,通常的习惯是除去“lib”函数库头和后面的版本号,使用库名和参数“-l”连接,形成“-lm”。于是,我们需要在gcc找不到库时,可是使用“-l”直接给定库名。

(再补充一下:如果库不在默认路径的话,用“-L”选项即可添加路径,gcc sin.c -lm -o sin等价于gcc sin.c -lm -L/lib -L/usr/lib -o sin)

C标准主要由两部分组成,一部分描述C的语法,另一部分描述C标准库。C标准库定义了一组标准头文件,每个头文件中包含一些相关的函数、变量、类型声明和宏定义。要在一个平台上支持C语言,不仅要实现C编译器,还要实现C标准库,这样的实现才算符合C标准。不符合C标准的实现也是存在的,例如很多单片机的C语言开发工具中只有C编译器而没有完整的C标准库。

在Linux平台上最广泛使用的C函数库是
glibc
,其中包括C标准库的实现,也包括本书第三部分介绍的所有系统函数。几乎所有C程序都要调用
glibc
的库函数,所以
glibc
是Linux平台C程序运行的基础。
glibc
提供一组头文件和一组库文件,最基本、最常用的C标准库函数和系统函数在
libc.so
库文件中,几乎所有C程序的运行都依赖于
libc.so
,有些做数学计算的C程序依赖于
libm.so
,以后我们还会看到多线程的C程序依赖于
libpthread.so
。以后我说
libc
时专指
libc.so
这个库文件,而说
glibc
时指的是
glibc
提供的所有库文件。

glibc
并不是Linux平台唯一的基础C函数库,也有人在开发别的C函数库,比如适用于嵌入式系统的
uClibc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐