Linux的共享(动态)库与静态库

共享库

 

对应于Windows的DLL动态库

共享库的制作

1)命名规则

lib+名字+.so

2)制作步骤

  1. 生成与位置无关的代码(生成与位置无关的.o -fPIC)

     gcc -fpic -c *.c -I../include

  1. 将.o打包生成共享库(动态库)

     gcc -shared -o libMyCalc.so *.o -Iinclude

          

3)发布和使用共享库

发布lib和include

使用

gcc main.c lib/libMyCalc.so -o app -Iinclude 

gcc main.c -Iinclude -L./lib -lMyCalc -o app

gcc main.c -Llib -lmytest -Iinclude -o app

4)解决程序执行时动态库无法被加载问题

①放到系统的库目录中——不允许使用

②临时测试

环境变量:LD_LIBRARY_PATH=将动态库的路径设置给变量

将设置的值,导入到系统环境变量中:export LD_LIBRARY_PATH

当终端关闭,设置会失效

③不常用的方法(永久设置)

在家目录的.bashrc文件 中添加一句话 export LD_LIBRARY_PATH=动态库目录的绝对路径

.bashrc修改完成,需要重启终端

需要找动态链接器的配置文件——/etc/ld.so.conf

动态库的路径写到配置文件中——绝对路径

更新—— sudo ldconfig -v

tar zxvf

tar jcvf

 

应用程序不能执行,动态连接器连接不到自己制作的库

1.临时设置方法

export LD_LIARAY_PATH=./lib

2.永久设置的方法

找到动态链接库的配置文件:/etc/ld.so.conf

在该文件中添加动态库的目录(绝对路径)

更新:sudo ldconfig -v

 

5)优缺点

有点:

执行程序体积小

动态库更新,不需要重新编译程序(函数接口不变)

 

缺点:

发布程序的时候,需要将动态库提供给用户

动态库没有被打包到应用程序中,加载速度相对较慢

 

 

 

 

$ldd app 查询app运行时调用的所有库

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值