动静态库的简单介绍和使用

linux下文件的类型是不依赖于其后缀名的,但一般来讲:
.o,是目标文件,相当于windows中的.obj文件
.so为共享库,是shared object,用于动态连接的,和dll差不多
.a为静态库,是好多个.o合在一起,用于静态连接




创建静态库:
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# gcc -c hello.c   /*生成.o的目标文件*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# ar -cr libhello.a hello.o /*使用目标文件生成libhello.a的静态库*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  libhello.a  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# gcc main.c -o main -L. -lhello /*编译的时候加上libxxx.a的静态库*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  libhello.a  main  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# ./main  /*可以运行成功*/
hello world
root@ubuntu:/home/wangyiyf2/test/libtest# rm libhello.a /*删掉libhello.a的静态库也可以运行*/ 
root@ubuntu:/home/wangyiyf2/test/libtest# ./main
hello world


注1:-cr:-c表示create,-r表示replace
注2:-L.表示lib,"."表示静态库在本目录下寻找。


创建动态库:
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# gcc -c -fPIC hello.c   /*产生.o的目标文件*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# gcc -shared -fPIC hello.o -o libhello.so  /*用目标文件生成.so的共享库*/
root@ubuntu:/home/wangyiyf2/test/libtest# ls
hello.c  hello.h  hello.o  libhello.so  main.c
root@ubuntu:/home/wangyiyf2/test/libtest# cp libhello.so /lib  /*把共享库复制到/lib 或/usr/lib目录下*/
root@ubuntu:/home/wangyiyf2/test/libtest# gcc -o main main.c -L. -lhello /*编译main函数,要包含共享库libxxx.so*/
root@ubuntu:/home/wangyiyf2/test/libtest# ./main        /*运行成功*/
hello world
root@ubuntu:/home/wangyiyf2/test/libtest# ./main        /*删掉/lib下的目标共享库的话运行失败*/
./main: error while loading shared libraries: libhello.so: cannot open shared object file: No such file or directory


注3:-L. -lhello :-l表示lib,hello是libhello.so的缩写,代表libhello.so   libxxx.so
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值