1.1 函数库的前世今生
(1)函数库就是写好的函数的集合,函数的思想就是“模块化”的思想,可以被重复调用。
(2)函数库最早是没有的,每个人要从零写程序,但是随着时间的发展(主要是懒),程序员就积累出一些常用的函数,可以拿来反复的调用。
(3)早期的函数共享都是源代码形式进行,但是缺点也很明显,容易被人盗用,不利于商业化。商业公司给客户提供服务的方式就是以库(静态库和动态库)的形式来提供。
1.2 静态库和动态库
(1)静态库
- 静态库是商业公司将自己的函数库源代码经过只编译不链接形成的.obj文件,然后用ar工具将其归档为.a的归档文件(静态连接库文件);
- 商业公司通过发布.a库文件和.h头文件提供静态库给客户使用;
- 客户拿到.a和.h文件后,通过.h头文件得知库中的库函数的原型,然后在自己的.c文件中直接调用这些库文件,在链接的时候链接器会去.a文件中拿出被调用的函数的编译后的.o二进制代码段链接进去形成最终的可执行程序;
- 静态库在用户链接自己的可执行程序时就已经把调用的库中的函数的代码段链接进最终可执行程序中了,该方式的优点是可以独立执行,缺点是程序太过庞大,尤其是有多个应用程序都使用了该库函数时,实际上在多个应用程序最后生成的可执行程序中都各自有1份该库函数的代码段,当这些应用程序同时在内存中运行时,实际上在内存中有多个该库函数的代码段,导致重复加载。
(2)动态库 - 动态链接库本身不将库函数的代码段链接入可执行程序,只是做个标记,然后当应用程序在内存中执行时,运行时环境发现它调用了某个动态库中的库函数时,会去加载这个动态库到内存中,以后不管有多少个应用程序去调用该库中的函数都会跳转到第1次加载的地方去执行,不会重复加载。
网友评论