加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux静态库,动态库,共享库

发布时间:2022-11-24 12:46:37 所属栏目:Linux 来源:
导读:  1、介绍

  当我们在Linux下创建自己的程序函数库时,经常使用的工具是GUN,当我们需要某些功能时,我们可以通过这些编译好的封装的函数库进行使用,这样可以让程序更加简洁,模块化,且容易编译。

  
  1、介绍
 
  当我们在Linux下创建自己的程序函数库时,经常使用的工具是GUN,当我们需要某些功能时,我们可以通过这些编译好的封装的函数库进行使用,这样可以让程序更加简洁,模块化,且容易编译。
 
  静态函数库:程序执行前(编译)就加入到目标程序中
 
  优点:1.(运行快)静态库被打包到应用程序中加载速度快
 
  2.发布程序无需提供静态库,因为已经在app中,移植方便
 
  缺点:1.(数据大)链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
 
  2.更新、部署、发布麻烦
 
  动态函数库和共享库是一样的,(在Linux上叫共享对象库,文件后缀是.so,window上叫动态加载函数库,文件后缀是.dll)
 
  动态函数库:程序执行前(临时)就加入到程序中,由目标程序(动态)调用
 
  优点:1.(数据小)链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存。
 
  2.程序升级简单linux动态库,因为app里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功。
 
  缺点:1.(运行慢)加载速度比静态库慢
 
  2.发布程序需要提供依赖的动态库
 
  2.库的制作
 
  静态库的制作:
 
  先是把功能函数经过gcc(文件名.c) -c 编译成.o文件
 
  ar rcs 静态库的名字 原材料
 
  ar -rcs libtest.a 文件名.o(生成静态库libtest.a)
 
  动态库的制作:
 
  gcc -share -fpic 文件名.c -o libcalc.so(生成动态态库libcalc.so)
 
  -shared 指定生成动态库
 
  -fpic 标准,用于编译阶段,在生成目标文件就得使用该选项,以生成位置无关的代码。
 
  3.库的使用
 
  静态库的使用:
 
  gcc (主函数.c) -ltset -L ./ -o mainProStatic
 
  ./mainProStatic
 
  -ltest -l是指定要用的动态库,库名去掉lib与.a
 
  -L 告诉gcc编译器从-L制定的路径去找静态库。默认从/usr/lib /usr/local/lib去找
 
  动态库的使用:
 
  gcc (主函数.c) -lcalc -L ./-o mainproDy
 
  引用动态库,怎么指定动态库的位置
 
  创建一个shell脚本(vi satrt.sh)
 
  加入export LD_LIBRARY_PATH="/home/pi/program/test" ./mainProDy
 
  保存退出(chmod +x start.sh)增加可执行权限
 
  ./mainprody
 
  察看库的大小:du mainProStatic/mainProDy
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!