<Linux系统复习>动静态库

一、本章重点

1、动静态库的制作与使用

2、动静态库的使用

3、动静态库的理解

4、安装两个好玩的库(ncurses、boost)

01 静态库的制作与使用

1、静态库的制作

静态库和动态库其本质都是一群.o文件的打包 ,静态库是将整个代码拷贝到要生成的可执行程序中,而动态库是当进程执行时,将动态库加载到内存中,可供所有进程共享该代码。

d7697cf8e3c5423fb1ce7a4478d1f5b3.png

5402f534da414ca7a5d664cc09107c5e.png

201d6b0fc4804eb98a83c4e01ac65e55.png 

 9fb16e77af484fbf8e0ab46cd2437b01.png

 2580b4255d73417483209d285d22ce44.png

 fb4f5b6f6f384da5bfa3c9f3bbb0dfaf.png

 

2、静态库的使用

5f1d7e1a03104121baceecbb121c348f.png

cd58ccbb557d4255bf37a454fc970520.png

 -I:可看作include,指明头文件在哪个目录下。(大I)

-L:可看作library,指明.a文件在哪个目录下。

-l:指明某个.a文件,因为lib目录可能不止一个.a文件。(小l)

 

用gcc编译的时候也可以不用-I、-L、-l,可以把头文件拷贝至系统路径/usr/include,把.a文件拷贝至系统路径/lib64

02 动态库的制作与使用

1、动态库的制作

3ae77b47bfa94416976321c4cb8f56b6.png 

 

2、动态库的使用

9f6050f57bc84f4fa19d4f8fe3a04e52.png

 为什么运行mytest的时候找不到动态库在哪?

解释:你只告诉了gcc动态库在哪?但程序运行的时候也需要你告诉它动态库在哪?

 

解决方法1:将动态库拷贝到系统路径下(/lib64)

99e74e60d2cb4fc1b78be3e99de284c2.png

 

解决方法2:导入环境变量(LD_LIBRARY_PATH)

b8fd4295ca344d8fbbab2dd21e8b91c5.png

 这种方法重新登录xshell就不行,原因在于导入的环境变量是临时的。

 

解决方法3:修改系统配置文件

e5bc2171d74a435bad73ee9749e42b2c.png

 在/etc/ld.so.conf.d目录下创建一个.conf的文件,注意后缀需要是.conf。这里我创建的是my_test.conf,然后写入库所在目录的路径。

c408c16ca5dc4bc198d1902ecd6d5c50.png

 最后用sudo ldconfg命令更新配置文件信息。c139a4a34b77433fa289495487d8d83a.png

 这种方式是永久有效的,重启xshell也能运行mytest。

 

解决方法4:软链接方案

fb1e072a967e4cf49f092bb552bad427.png

 在/lib64创建一个libmymath.so的文件,该文件指向.so的库文件。

03 静态库与动态库的理解

1、静态库在程序编译阶段就将代码拷贝至可执行程序里面。

优点:不依赖库

缺点:浪费内存和磁盘空间

 

2、动态库是在链接阶段将地址填写到可执行程序调用的地方,当可执行程序运行时,动态库会被加载到内存,动态库的代码可供多个进程共享。

优点:节省内存和磁盘空间

缺点:依赖库,删除库后无法正常运行。

 

3、共享区的理解

195610bc564d479ebd3018c053b2314a.png

04 安装两个好玩的库(ncurses、boost)

1、sudo yum install -y ncurses-devel

2、sudo yum install -y boost-devel

 

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

李逢溪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值