linux动态库与静态库(简析)

一:什么是动态库与静态库

静态库:程序在编译链接的时候把库的代码链接到可执行文件中。

动态库:程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。

二:分别的优点和缺点

静态库:
优点:

静态库被打包到应用程序中加载速度快

发布程序无需提供静态库,因为已经在app中,移植方便

缺点:

链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝

更新、部署、发布麻烦

动态库:
优点:

链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存

程序升级简单,因为app里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功。

缺点:

加载速度静态库

发布程序需要提供依赖的动态库

三:如何制作静态库与动态库

制作静态库:

第一步:将要打包的 xxx.c 文件 生成 xxx.o文件:

     gcc xxx.c -c

第二步: 用 xxx.o文件 生成静态库文件(打包):

     ar -rcs this.a xxx.o

生成的静态库文件把头和尾去掉(把 lib 和 .a 去掉)就是库的名称

ar命令是gnu的归档工具,常用于将目标文件打包为静态库,下面我们使用ar命令的-r 选项和-c选项进行打包。

  • -r(replace):若静态库文件当中的目标文件有更新,则用新的目标文件替换旧的目标文件。

  • -r(rreate):建立静态库文件。

静态库的使用
gcc mytest.c -I ./lib -L ./lib -l mymath

我们在使用静态库进行编译链接时,需要指定头文件的所在路径,库文件的所在路径以及所要掉用的库名称

  • -I:指定头文件所在路径。

  • -L:指定库文件所在路径。

  • -l:指明需要链接库文件路径下的哪一个库

制作动态库

将要打包的 xxx.c 文件生成动态库文件:

    gcc -shared -fpic xxx.c -o libxxx.so
动态库的使用:
    gcc main.c -lnew -L ./ -o xxx
动态库路径指定

方法一:在配置文件/etc/ld.so.conf中指定动态库搜索路径。

vi /etc/ld.so.conf

添加 lib目录

ldconfig

方法二:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径。

export LD_LIBRARY_PATH=”LD_LIBRARY_PATH:/opt/”

方法三:在编译目标代码时指定该程序的动态库搜索路径。

还可以在编译目标代码时指定程序的动态库搜索路径。通过gcc 的参数”-Wl,-rpath,”指定

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值