您的位置:首页 > 运维架构 > Linux

静态库

2016-06-14 09:23 330 查看
静态库可以认为是一些目标代码的集合,即对多个目标代码归档到一个文件中。命名一般以”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命令只是检测动态库,不能检测静态库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  静态库 Linux