PS:之前觉得链接库之后一定要有头文件,是因为这个头文件提供了一个函数的入口地址,现在发现,完全理解错了
头文件和库没有什么关系
头文件包含在源文件中,是为了在编译时说明源文件中调用的函数存在,而真正链接时,源文件编译生成的目标文件.o与库文件链接,这才实现源文件调用库中的函数
一、源文件调用源文件下的函数
先不讨论库,先看一个c文件调用另一个c文件下定义的函数
main() 函数调用了 func() 函数,由于 main.c 文件中并没有定义该函数,所以需要有该函数的声明,表明存在该函数,不然编译的时候会报错,下面有两种方式声明该函数
1.在头文件中声明该函数,源文件包含该头文件
1 | ===============c文件=============== |
2.在调用该函数的源文件声明该函数
1 |
|
二、源文件调用库里的函数
库函数可以理解为多个源文件编译后生成的目标文件的集合,其实和第一种情况一样
源文件包含库的头文件,相当于函数声明,即编译源文件时,表明该库函数存在,不会把报错
但链接的时候,还是编译后的源文件与库函数链接,实现函数的调用