Linux静态库(static lib)c语言简单操作

Linux静态库(static lib)c语言简单操作

接上一个动态库博客

  • 静态库也是库的一种形式,也是一种二进制的封装形式,在静态库做好之后,需要静态库的工程,在编译的时候,会直接把静态库的内容编译进可执行程序中(使用静态库的可执行文件会比使用动态库的可执行文件大),这样这个可执行文件,就可以直接允许,不需要指定库的加载路径

例子:
假如库的源代码为find_max.c find_max.h sort_arry.c sort_arry.h为例
1.编写源代码

2.把源代码分别编译成.o文件

gcc -c find_max.c -o find_max.o 
gcc -c sort_arry.c -o sort_arry.o 
//可链接文件,包含了这个.c文件本身所有的二进制指令

3.利用ar命令把所有的.o文件打包,生成一个静态库

ar -rc 库的名字 o文件列表
ar -rc libfind_max.a find_max.o
ar -rc libsort_arry.a sort_arry.o

静态库:是以lib开头,以.a结尾
只需要把头文件和库文件拷贝给需要的人即可

4.使用静态库:

gcc main.c -Iinc  -lfind_max  -lsort_arry.a  -L./lib   //第一步编译
ldd a.out    //第二步查看依赖库文件
linux-vdso.so.1 (0x00007fffa8322000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc9d069f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc9d0c92000)

使用静态库是把静态库的内容copy到了可执行文件中,所以查看依赖关系的时候不会出现.a库文件的

  • 静态库只在编译的时候需要库文件,在运行的时候不需要静态库

静态库和动态库优缺点

静态库:静态库只在编译的时候需要库文件,在运行的时候不需要静态库
编译后就不需要静态库了,不管你的机器中有没有静态库
动态库:

1.静态库明显是冗余的
动态库在系统中,永远只有一份拷贝,不管你有多少个可执行程序用到了这个库,都只有一份,这些可执行程序共享这一份copy
静态库在系统中,有多少个可执行程序,就有多少份copy

2.动态库的更新
只要接口不变,依赖于动态库的程序就不需要重新编译,只需要把更新好的动态库下载到相应的系统中去就可以了,这一点静态库永远做不到。
接口不变:库的名字没变,函数的三要素没变
像游戏的不停服更新就是使用动态库原理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值