【Linux】软硬链接&动静态库

[复制链接]
发表于 2026-1-28 03:56:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
1.软硬链接

1.1见一见软链接


此中,ln是link的意思。s代表soft。file_target1.txt是平常文件。将file_soft.link链接到file_target1.txt上。


这张图片阐明软链接也是独立的文件,由于它有独立的inode。
1.2见一见硬链接


先创建file_target2.txt。


创建硬链接


创建完成之后,我们发现硬链接和原文件的inode雷同,而且反面的数字从1变成2了!
1.3结论

1.3.1软链接

1.软链接是独立的文件,由于有独立的inode number。
2.软链接的内容:目标文件所对应的路径字符串。
3.软链接非常类似于windows中的快捷方式。


以是软链接不是类似快捷方式,而是就是快捷方式!
1.3.2硬链接

硬链接不是一个独立的文件,由于它没有独立的inode number,它用的是目标文件的inode。
什么是硬链接:
1.硬链接就是文件名和inode的映射关系。
2.创建硬链接就是在指定目次下,添加一个新的文件名和inode number的映射关系!
3.创建硬链接后,把目标文件删除。这个利用相当于重定名。实在就是删除了文件名和inode number的映射关系而已。
4.属性中有一列数字,就是硬链接数。也是文件的磁盘级引用计数:有多少文件名字符勾通过inode number指向目标文件的inode。
以是
任何一个目次,刚开始新建的时间,引用计数肯定是2。由于有潜伏文件.(当前路径)。
目次A内部新建一个目次,会让A目次的引用计数+1,由于有潜伏文件..(上一级路径)。
总结:一个目次内部有几个目次:A目次的引用计数-2。
硬链接的用途:
1.构建Linux的路径结构,让我们可以使用.和..来举行路径定位。
2.用来做文件备份。在其他目次下创建目标文件的硬链接,如许纵然目标文件被误删了,还能用硬链接找到目标文件!
硬链接留意事项:


用户本身不能给目次创建硬链接,制止形成路径围绕。否则在ls一个目次的时间,遇到这个目次的硬链接时,又跳转返来了,是死循环。
但是.和..是目次的硬链接,以是Linux体系有特别设置:在遇到.和..时不要有特别利用了!
2.动静态库

2.1动态库

在Linux体系里,动态库一样平常以.so末端。
在windows体系里,动态库一样平常以.dll末端。
2.2静态库

在Linux体系里,静态库一样平常以.a末端。
在windows体系里,静态库态库一样平常以.lib末端。
2.3见一见库


新指令:ldd a.out,查察可实行步伐所依赖的库。


这是一个软链接,真正的C语言库是libc-2.17.so。
要让我们的步伐运行起来,第一须要a.out的可实行步伐,第二须要库。这两个组合起来才是真正的可实行步伐。
2.4关于库的明白

头文件是一个手册,提供函数声明,告诉用户怎么用。
.o提供实现,我们只需补上一个main,调用头文件提供的方法,然后和.o举行链接,就能形成可实行步伐。
什么是库:
所谓的库文件,本质上就是把全部的.o(源文件编译形成.o文件)打包后形成一个库文件,这个库文件就是所谓的库。
为什么要有库:
进步开辟服从。
天生静态库的指令:


在库中有很多.o文件,此中有个别.o文件大概会更新,如许我们须要重新打包形成库。r的意思就是在原来的库中的文件中,假如我们这次打包时有重复的,就更换。c的意思是不存在就创建。
静态库的定名:
以lib开头,中央的myc是库真正的名字,.a就是静态库的后缀。
什么是安装:
一样平常下载时,会下载一个压缩包,内里包罗了头文件和库文件。
安装就是把下载好的文件拷贝到体系默认的搜索路径下,头文件拷贝到头文件的路径下,库文件拷贝到库文件的路径下。
安装好后,就可以把原来下载好的压缩包删掉了,固然不删也可以。


安装好后在编译时,假如我们只用了C标准库,就直接gcc main.c就能形成可实行步伐。
但是我们假如用了第三放库(由第三方提供),就须要带-l选项,反面跟库真正的名字(就是去前缀,去后缀后 剩下myc)中央可以有空格,也可以没有。
由于gcc默认认识C标准库的,但是不认识第三方库,以是要加上。
什么是卸载:
卸载就是把头文件和库文件从体系路径中删掉。
如安在当前路径下使用静态库(不安装):


假如把第三方库安装到体系路径下是一种很欠好的做法,能不能直接在当前路径下使用库呢?
可以!须要提供三个选项:


为什么不须要指定具体的哪个头文件呢?由于在main.c中已经指定了!这时可以用尖括号,我们告诉gcc的路径就相当于是体系路径了。
固然也可以不消指定头文件路径,但只能在mian.c中用双引号了,表现先去体系路径下找,没找到,再去双引号引起来的路径中去找。
但是库文件就必须要指定了!
静态链接:


带-static就是全部的库全部静态链接,就是把库中的实现方法拷贝到可实行步伐中。
假如不带-static就是遇到动态库,进办法态链接,遇到静态库,举行静态链接。
形成动态库:
动态库是开辟中用的最多的,有80%-90%。


先通过这条指令把源文件编译成.o文件。


把全部的源文件编译形成.o文件之后,编译器本身就支持打包动态库,只不外须要加上-shared选项。否则编译器就把它们编译形成可实行步伐啦!(没有main函数就会报错)。
2.5动静态库加载时的区别

静态库:



实行这一条指令,形成的可实行步伐就可以用了!由于在编译期间,以经将库中的代码拷贝到我们可实行步伐内部了,加载时和库就没有关系了!
动态库:
动态库的加载就要复杂一点,在实行了静态库的那一条指令后,确实会形成可实行步伐a.out,但这个可实行步伐实行不了:


缘故起因在于你只是把库的位置告诉了编译器,却没有告诉利用体系。由于动态库和可实行步伐是有接洽的,在步伐运行时,利用体系须要找到动态库并加载。
办理方法:
方法一:


把动态库拷贝到体系的默认搜索路径下,我们之前的可实行步伐不消重新编译,可以直接运行!这也证实确动态库和可实行步伐有关联。
但上文也说了,不发起如许做。
方法二:
在体系默认搜索路径下创建一个软链接,链接到我们写的动态库上。如许步伐就可以运行了!
方法三:修改情况变量


在Linux体系中,有一个情况变量是LD_LIBRARY_PATH,它标识了体系的默认搜索路径。


将我们写的动态库加上之后,步伐就可以运行了!
但是情况变量只是内存级别的,下次登录又没了。想要永世有用,须要去修改设置文件中的情况变量。




重新登录,查察情况变量时,就自带了我们动态库的路径!
方法四:


这个路径下是体系的一些设置文件。


在这个路径下创建一个设置文件,后缀必须是.conf,其他的随意。


然后写上我们写的动态库的绝对路径,就OK了!
然后我们须要让设置文件收效:

在root权限下,实行ldconfig,意思是让

这条路径中的全部设置文件收效。
然后我们的可实行步伐就可以顺遂运行了!
总结:


2.6动态库VS静态库


回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表