Linux系统编程之库

本文详细介绍了Linux系统中静态库和动态库的制作与使用方法,包括静态库的.ar打包、动态库的共享库创建,以及动态库的使用和软硬链接的生成。静态库在程序中直接包含,启动快但占用空间大;动态库在运行时加载,节省空间但加载稍慢。软链接类似Windows快捷方式,而硬链接通过索引节点连接文件,两者在文件更改时都会同步变化。
摘要由CSDN通过智能技术生成


库是你可以使用它,但你不能看到它是如何实现的,因而库文件也赋予了库相同的特性,相当于库是提供了函数的接口,功能开发者会有注释,但是函数内部怎么实现的是看不到的。

静态库

静态库文件名的命名方式是“libxxx.a”,库名前加”lib”,后缀用”.a”,“xxx”为静态库名。

制作步骤

①首先把自己要写的材料也就是.c文件打包成.o文件
gcc xxx.c -c
②再把.a文件生成.o文件,注意取名要用lib开头
ar rcs libxxx.o xxx.c

静态库的使用

gcc xxx.c -lxxx -L 路径 -o 
    xxx.c是要编译的文件
    lxxx 是静态库砍掉lib然后去掉.o
    -L 静态库的位置,如果不指定,再找默认库目录 /lib或/usr/lib或/usr/local/lib底下找

优点 :

1.静态库被打包到应用程序中加载速度快
2.发布程序无需提供静态库,因为已经在app中,移植方便

缺点:

1.链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
2.更新、部署、发布麻烦。

动态库

动态库的名字与静态库的名字相似,都是以lib开头,但后缀是.so

制作步骤

gcc -shared -fpic xxx.c -o xxx.so
        -shared 指定生成动态库
		-fpic 标准,fpic 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。
		xxx.c是要打包成库的材料
		xxx.so是动态库的名字

动态库的使用

	gcc xxx.c -lxxx -L 路径 -o 
       xxx.c是要编译的文件
       lxxx 是动态库砍掉lib然后去掉.so
       -L 动态库的位置,如果不指定,再找默认库目录 /lib或/usr/lib
      或者输入 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:动态库的路径 (来指定程序动态链接库文件搜索路径)
但是这样配置只能在当前窗口执行有效,换一个窗口又需要重写指令
那么这时就可以写一个.sh的脚本来代替你输入复杂的指令

优点:

1.链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,节省内存。
2.程序升级简单,因为app里面没有库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功。

缺点:

1.加载速度比静态库慢
2.发布程序需要提供依赖的动态库

为了实验是否动态库和静态库对内存的使用是不一样的,可以用
du指令来看文件大小的区别

软链接

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下输入生成链接的指令就可以生成一个指向该文件的链接,像在库文件底下经常会看到与“xxx.so.2.1.3”类似的文件,软连接有些类似于windows底下的快捷方式。

当我们输入指令

ls -la  看到 某个文件->某个文件,就是软连接

在这里插入图片描述

生成软连接

ln -s libxxx.so.2.50 libxxx.so 
	ln为指令
	-s是参数
	第一个是被链接的文件
	第二个是生成的软链接
当然位置可以任意指定

如果一个文件有多个软连接,当某一处文件改动了,其他文件都会随之发生改变,这就是ln的作用

硬链接

硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

生成硬链接

ln libxxx.so.2.50 libxxx.so 
软链接去掉-s参数就是生成硬链接

如果一个文件有多个硬连接,当某一处文件改动了,其他文件也会随之发生改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值