【Linux】静态库和动态库的创建与使用--示例讲解

目录

一、库的种类

二、静态库和动态库的优缺点

三、静态库的创建与使用

1.创建动态库流程:

2.使用静态库

四、动态库的创建与使用

1.创建动态库

2.使用动态库


一、库的种类

Linux 下的库有两种:静态库 和 动态库(共享库);

静态库:程序在编译链接的时候把库的代码链接到可执行文件中, .a 为后缀

动态库:程序在运行的时候才去链接动态库(共享库)的代码,可以多个程序共享使用库的代码,通常以.so为后缀;

二、静态库和动态库的优缺点

静态库:把库的代码载入可执行文件中,因此体积较大,当静态库中的内容更新后需要重新编译;由于编译器或链接器知道实际进入程序的代码,可以进行优化,运行速度会快一些;

动态库:只在程序运行时载入内存,因此体积较小,共享库如果发生变化不需要重新编译;运行速度相对慢一些;

三、静态库的创建与使用

1.创建动态库流程:

创建动态库流程

(1)将代码文件编译成目标文件.o    

gcc -c test.c

(2)通过ar工具将目标文件打包成.a静态库文件  

ar -crv libMytest.a test.o

ar 是一个专门控制静态库的命令

-c:创建静态库,不管库是否存在
-r 把目录文件合并成一个静态库,如果静态库文件已经存在则更新。

-v :使用详细模式

-q 向静态库中添加目录文件
-t 查看静态库中有哪些目标文件
-d 从静态库中删除目标文件
-x 把静态库展开为目标文件

生成静态库libMytest.a  ,可以看到后缀是.a

 

2.使用静态库

共有两种方法,分别如下:

(1)直接调用

把静态库当作目标文件一样

gcc 1.c libMytest.a

(2)通过gcc -L参数来指定库的路径

gcc 1.c -L./ -lMytest

 然后运行a.out就可以执行代码

-L:表示要连接的库所在目录

-l:指定库的名称(不需要前面的lib和扩展名.a只留下中间部分)

四、动态库的创建与使用

1.创建动态库

(1)将代码文件编译成目标文件.o ,此时要加编译器选项-fpic

-fPIC 创建与地址无关的编译程序(pic,position independent code),是为了能够在多个应用程序间共享

(2)生成动态库,-shared指定生成动态链接库

生成了动态库libMytest.so,可以看到后缀是.so 

以上两行命令也可合成一句

gcc -fPIC -shared -o libMytest.so *.c

2.使用动态库

和上面提到的使用静态库第二种方法一样

gcc 1.c -L./ -lMytest

然后执行a.out的时候我们会发现报错了

原因:链接器ld提示找不到库文件,ld默认的目录是/lib和/usr/lib,如果放在其他路径也可以,需要让ld知道库文件所在的路径

最简单的解决方法就是把动态库拷贝一份到/usr/lib目录中

 另一种方法就是添ld知道库文件所在的路径

sudo vim /etc/ld.so.conf

 然后添加动态库所在的路径,用pwd查看一下

 然后更新一下

sudo ldconfig

 这样就可以了

感谢观看!!!!

以上就是全部内容,如果对您有帮助,欢迎点赞评论,或者发现有哪里写错的,欢迎指正!

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

logani

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值