头文件和库文件的区别
在编程过程中,程序代码往往被拆成很多部分,每部分放在一个独立的源文件中,而不是将所有的代码放在一个源文件中。考虑一个简单的小例子:程序中有两个函数main()和abc()。main()函数位于main.cpp,abc()函数位于abc.cpp,main()函数中调用abc()函数。在编译阶段,由于编译是对单个文件进行编译,所以编译main.cpp时,编译器不知道是否存在abc()函数以及abc()调用是否正确,因此需要头文件辅助
。也就是说,在编译命令:
cl.exe /c main.cpp
运行时,编译器不知道abc的用法是否正确(因为abc在另一个文件abc.cpp中),只有借助头文件中的函数声明来判断。对main.cpp进行编译时,不会涉及abc.cpp文件,只会涉及main.cpp 和abc.h(因为abc.h被include)文件。
库文件:
库文件中包含一系列的子程序。例如abc.cpp 源文件中实现了abc()函数,我们假设abc()函数是包含重要算法的函数,我们需要将abc()函数提供给客户使用,但是不希望客户看到算法源代码。为了达到这一目的,我们可以将abc.cpp编译程库文件,库文件是二进制的,在库文件中是看不到原始的源代码的。库和可执行文件的区别是,库不是独立程序,他们是向其他程序提供服务的代码。 当然使用库文件的好处不仅仅是对源代码进行保密,使用库文件还可以减少重复编译的时间,增强程序的模块化
。将库文件连接到程序中,有两种方式,一种是静态连接库,另一种是动态连接库。
简单说:
头文件:通常是存放库文件中函数的声明啥的,这样我们在编译源文件时不会报错
库文件:具体函数的实现。库文件又包含静态库和动态库。
库文件通过头文件向外导出接口。用户通过头文件找到库文件中
头文件中有函数的申明,库文件实现函数的定义
。
程序运行的一些基础知识
1. 编译程序时去哪找头文件?
系统目录:就是交叉编译工具链里的某个include目录;
也可以自己指定:编译时用 “ -I dir ”选项指定。
<