静态库

静态库可以认为是一些目标代码的集合,即对多个目标代码归档到一个文件中。命名一般以”lib“开头,以”.a“结尾,如“libmycal.a”。静态库相比于动态库存在的优点是:引用了静态库的代码进行编译链接后,会将静态库的副本包含进应用程序中,这样在别的机器上运行时,就不用担心找不到库了。缺点就是:当多个应用程序调用相同的静态库时,内存中会有多个静态库的副本被载入,每个库归相应的应用程序调用,消耗内存。


  • 演示生成静态库

1) 查看文件目录

#tree
.
├── main.c
└── src
    ├── add.c
    ├── common.h
    ├── dive.c
    ├── mul.c
    └── sub.c

2) 生成静态库

#mkdir lib
#ls
lib  main.c  src
#cd src/
# ls
add.c  common.h  dive.c  mul.c  sub.c

//生成目标文件(.o)
#gcc -c -fPIC *.c
#ls
add.c  add.o  common.h  dive.c  dive.o  mul.c  mul.o  sub.c  sub.o

//生成静态库libmycal.a
#ar rcs libmycal.a *.o
# ls
add.c  add.o  common.h  dive.c  dive.o  libmycal.a  mul.c  mul.o  sub.c  sub.o

//查看静态库中包含的信息
#nm libmycal.a 
add.o:
0000000000000000 T add

dive.o:
0000000000000000 T dive

mul.o:
0000000000000000 T mul

sub.o:
0000000000000000 T sub

//移动静态库到lib目录中
#mv libmycal.a ../lib
#cd ..
#lib  main.c  src
lib  main.c  src
#tree
.
├── lib
│   └── libmycal.a
├── main.c
└── src
    ├── add.c
    ├── add.o
    ├── common.h
    ├── dive.c
    ├── dive.o
    ├── mul.c
    ├── mul.o
    ├── sub.c
    └── sub.o

2 directories, 11 files

使用静态库

// -I指定头文件目录,注意-I和之间没有空格
#gcc -Isrc main.c lib/libmycal.a -o app
#./app
9

注意:ldd命令只是检测动态库,不能检测静态库。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值