关于静态库和动态库
程序员文章站
2022-06-04 12:38:30
...
写在前面的话:
- 版权声明:本文为博主原创文章,转载请注明出处!
- 博主是一个小菜鸟,并且非常玻璃心!如果文中有什么问题,请友好地指出来,博主查证后会进行更正,啾咪~~
- 每篇文章都是博主现阶段的理解,如果理解的更深入的话,博主会不定时更新文章。
- 本文最后更新时间:2020.7.27
正文开始
概念解释
库函数
:库函数(Library function)是把函数放到库里,供别人使用。库文件
:看不到库文件里定义的函数和变量,但是可以使用。
库文件分为两种:
-
静态库(.a)
:在编译时
将库文件里的代码搬迁到可执行文件里 -
动态库(.so)
:在执行时
将需要的库文件里的代码搬迁到可执行文件里
静态库
静态库的创建
gcc -c 源文件.c
ar -rcs 静态库名 目标文件1 目标文件2
c
:create,如果库文件不存在,则创建该库文件r
:replace,如果库文件存在,则替换原文件s
:更新库文件
例如,将add.c
做成库文件:
- 将 add.c 编译为 add.o 文件:
gcc -c add.c
ar -rcs libadd.a add.o
提醒:add是名字,一定要加前缀、后缀
静态库的使用
静态库创建成功之后,对全局变量和函数进行声明,在编译的时候加上库文件就行了
gcc -o file file.c -L -lname
如 add 的例子:
gcc -o main main.c -L. -ladd
-L
:指定库的路径-L.
:当前目录
动态库
gcc -shared -fPIC add.c -o libadd.so
依赖于动态库编译的文件和依赖于静态库编译的文件的优缺点
- 使用静态库代码体积大,动态库代码体积小
- 使用静态库执行效率高,动态库执行效率低
- 使用静态库不利于升级(升级麻烦,需要重新编译),使用动态库易于升级
- 使用静态库编译速度慢,使用动态库不需要加载,编译速度快
- 使用静态库代码布局更方便
什么时候使用动态库或静态库?
要求升级,动态库
对执行效率有要求,静态库
对编译速度有要求,动态库
上一篇: Mysql PDO基础操作
下一篇: cidr