LINUX库概念及制作

概念:
在这里插入图片描述
参考博文链接:
https://www.cnblogs.com/sunsky303/p/7731911.html
https://blog.csdn.net/wk_bjut_edu_cn/article/details/81735956

静态库:
静态函数库:程序执行前(编译时)就加载到目标程序中去。
优点:
1.静态库打包到程序中加载速度快
2.发布程序无需提供静态库,已经在APP中,移植方便
缺点:
1.程序太大
2.链接时完整的拷贝到可执行文件,被多次使用就有多次冗余拷贝。
3.更细、部署、发布麻烦
动态库:
动态函数库:是在程序执行时动态临时由目标程序去调用。
优点:
1.程序小
2.链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可共用,节省内存
3.程序升级简单,因为APP里没有库的源代码,升级时只要库的名字不变,函数名及参数不变,只是实现做了优化,就能加载成功。
缺点:
1.加载速度比静态库慢
发布程序需提供依赖的动态库

(重点)静态库的制作:
1.把要做成静态库的功能文件通过gcc xxx.c -c来生产一个xxx.o的文件。
2.将.o的文件打包:

ar rcs + 静态库的名字 + 原材料

例如:ar rcs libxxx.a xxx.o//静态库格式是xxx.a,xxx.o是产生的.o原材料文件。
静态库的使用:

gcc xxx.c -lxxx -L ./  /* -l的xxx是静态库.a砍头去尾(砍掉lib和.a), -L ./ 是默认从当前路径去找头文件*/

补充(-L 是从制定位置找.h文件, ./是当前路径)
例子:
制作:
在这里插入图片描述
在这里插入图片描述
使用:
在这里插入图片描述
(重点)动态库函数制作:

gcc -shared -fpic xxx.c -o libxxx.so

xxx.c为要生成的功能函数代码,-shared 为制定生成动态库 ,-fpic :标准,选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码,
动态库的使用:

gcc xxx.c -lxxx -L ./ /* xxx.c 是主程序,-lxxx的xxx是libxxx.so砍头去尾 后面同静态库一样*/
带动态库的程序,可以指定该程序运行的时候,在 LD_LIBRARY_PATH所指定的路径去找库文件。

引用动态库怎样指定动态库的位置:
引用临时环境变量,换个窗口就得重新设置。一般为了操作方便写个.sh脚本。

export LD_LIBRARY_PATH="XXX你所要指定的位置的路径"

在这里插入图片描述

在这里插入图片描述
因为环境变量是临时的,一般都写个脚本去运行。
如何写脚本:
1.创建脚本文件:vi xxx.sh
2.把指定环境变量的函数写到脚本里面
在这里插入图片描述

3.注意脚本是没有可执行的权限----------------------,所以我们运行脚本前要先给它加可执行的权限chmod +x xxx.sh
4.再脚本里运行主程序(在运行脚本,运行过程:脚本先运行环境变量的函数,再去运行主程序,这样在别的窗口也能用。)
5.注意脚本是直接./运行,不用编译。运行要加后缀例如:./xxx.sh

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值