用#include引入头文件只是复制了库函数的声明,实际使用时寻找库函数的实现是由编译器或链接器实现的。不同系统使用不同的方法搜索库函数,有三种可能性。
一、自动访问
许多系统上,你只需编译程序,一些常见的库函数自动可用(甚至不用引入头文件)
二、文件包含
如果函数定义为宏,可使用#include指令来包含拥有该定义的文件
三、库包含
在程序编译或链接的某些阶段,您可能需要指定库选项。因为即使在自动检查标准库的系统上,也有可能有不常用的函数库。必须使用编译时选项来显示地指定这些库。
注意要把这个过程与包含头文件区分,因为头文件提供函数的声明或原型,而库选项告诉系统到哪儿寻找函数代码。
例如你#include<math.h>
然后在函数中使用了sqrt函数(求平方)
但是在编译时却得到了类似下面的消息
Undefined:_sqrt
或:
'sqrt':unresolved external
或是类似的消息,这表明编译器的链接器没有找到数学库。
此时你可以在命令行手动的让链接器找到数学库
UNIX系统要求使用-lm标记
cc a.c -lm
其中cc是编译器的名字,a.c是源文件的名字
Linux的gnu编译器也使用同样的形式
gcc a.c -lm