库文件的分类:
静态库 【.a】 保存的函数和变量,在编译阶段加载到可执行文件中
动态库【.so】保存的函数和变量,会在执行阶段加载到可执行文件中
静/动态库的区别;(也就是生成可执行文件的区别)
1.编译出可执行文件的大小:静态库 大于 动态库(更占内存)
2.执行速度:静态库 快于 动态库
3.升级: 静态库 差于 动态库
4.部署上:静态库 优于 动态库
制作静态库
1.将目标源文件编译成目标文件;【gcc -c hello.c】(到汇编文件时停下)
2.使用ar工具生成制作静态库:
【ar -rcs(不存在就创建,存在则更新)《所要生成库的名字(lib+库名+后缀.a)》 《目标文件》】
例:ar -rcs libhello.a add.o
使用静态库
-l:指定加载的静态库
-L:制定加载的库文件的第三方存放路径。
【gcc 《源文件》 -I《库名》 -L《库存放路径》】
【库文件的存放路径:系统运行所需要的库文件,都放在:/lib;第三方软件和工具运行所需要的库,放在:/usr/lib 或者/usr/local/arm/lib。编译时,编译器会自动到这两个路径下寻找需要链接的库文件
若不指定存放路径,则会自动去/lib和/usr/lib再去寻找,也就是说,要么给出库文件所在位置,要么在这两个目录下有库文件,这样才能编译通过】
例:gcc hello.c (-o hello.out) -ladd -L./lib (-o hello.out)
【.h文件也与静态库文件和main.c文件放在同一个目录内】
下图是制作一个含有sub和add两个的静态库