库文件的实质是预先编译好的方法的集合。
库文件分为静态库和动态库(共享库)两种:Linux系统静态库扩展名为: .a ;动态库扩展名为:.so
windows系统静态库扩展名为: .lib;动态库扩展名为: .dll
静态库:
(1)特点:程序在链接过程中直接将库中的内容复制到生成的可执行文件当中。因此静态库是在程序的链接阶段被复制到程 序当中,和程序的执行过程没关系。即静态库生成的可执行文件最终执行时并不依赖库文件。
(2)创建命令:
例:有两个源文件:main.c max.c
1)gcc -c main.c max.o(生成main.o和max.o文件)
2)使用ar将目标文件归档 ar crv libxxx.a main.o max.o
动态库(共享库):
(1)特点:动态库在链接阶段并没有被加载到程序当中,而是在程序运行时被系统动态加载到内存当中供程序使用。
(2)创建命令:
例:有一个源 文件main.c
gcc -fPIC -shared -o libxx.so main.c
静态库和动态库的区别:静态库的可执行文件中包含库代码的一份完整的拷贝,因此,当它被多次使用时会有多份没用的拷贝在内存中,所以比较占内存;而动态库则只需要载入一次动态库,不同程序可以得到内存当中相同的动态库的副本,因此会节省许多内存。
系统调用执行的过程中系统调用与库函数的区别:执行用户代码时,处于用户态;执行内核代码时处于内核态。
库函数的实现在函数库里面,而系统调用的实现在内核中。