Linux下的C语言pow()函数引出的问题

来源:互联网 发布:ubuntu恢复系统 编辑:程序博客网 时间:2024/05/17 21:53
gcc test.c //运行报错gcc test.c -lm //运行正常  下面是原话With all recent versions of GCC, when you use the math libraryyou have to explicitly link to it (it is not automatically linked to along with the rest of the standard C library).If you arecompiling on the command-line with the gcc or g++ command, youwould accomplish this by putting -lm at the end of the command.For example: gcc -o foo foo.c -lm

Linux下的C语言pow()函数引出的问题
本文由 Ricky 发表于 2015 年 09 月 08 日 已浏览

今天才Linux下用math.h库的pow()函数,gcc编译的时候报错返回:对‘pow’未定义的引用
查了下资料,需要在gcc编译的时候加上-lm参数才能正常编译。
这是为什么呢?再查了下资料:

使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.so库文件中(这些库文件通常位于/lib目录下),-lm选项告诉编译器,我们程序中用到的数学函数要到这个库文件里找。本书用到的大部分库函数(例如printf)位于libc.so库文件中,使用libc.so中的库函数在编译时不需要加-lc选项,当然加了也不算错,因为这个选项是gcc的默认选项。

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提供的所有库文件。

转载:http://www.rickyhao.com/index.php/archives/64/

1 0