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

news2024/11/19 3:45:50

软硬链接

软硬链接的区别:

  • **软链接:**是一个独立文件,有自己独立的 inode 和 inode 编号。
  • **硬链接:**不是一个独立的文件,它和目标文件使用的是同一个 inode。硬链接就是单纯的在 Linux 指定的目录下,给指定的文件新增 文件名 和 inode 编号的映射关系!

我们可以通过如下命令,创建一个文件的软硬链接:

$ ln -s 文件名 链接文件名    # 创建软连接
$ ln 文件名 链接文件名       # 创建硬链接

理解硬链接:

我们看到,真正找到磁盘上文件的并不是文件名,而是inode。 其实在linux中可以让多个文件名对应于同一个
inode。

[root@localhost linux]# touch abc [root@localhost linux]# ln abc def 
[root@localhost linux]# ls -1i
abc def 263466 abc 263466 def
  • abc和def的链接状态完全相同,他们被称为指向文件的硬链接。内核记录了这个连接数,inode

    263466 的硬连接数为2。

  • 我们在删除文件时干了两件事情:1.在目录中将对应的记录删除,2.将硬连接数-1,如果为0,则将对应

    的磁盘释放。

硬连接数:

ll

image-20231103192018050

这些数字就硬链接数

硬链接本质就是该文件 inode 属性中的一个计数器 count。用来标识就几个文件名和我的 inode 建立了映射关系。简而言之,就是有自己文件名指向我的 inode (文件本身) 。

理解软链接:

我们创建一个软连接,可以使用下面的指令:

$ ln -s 文件名 链接文件名    # 创建软连接

image-20231103190631505

我们可以很明显的发现他们的inode不同

image-20231103190746248

我们创建一个mytest.c,内容如下:

#include <stdio.h>
 
int main(void) {
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
    printf("hello, soft link...\n");
 
    return 0;
}

程序正常运行,这里我们在 上级目录的上级目录 下直接 ./mytest.exe 就可以运行。

但是,如果我们如果想在外面运行这个程序就会很累,因为它的路径有点深:

image-20231103191250575

太麻烦了,所以这里我们就可以给它建立一个软连接,解脱双手:

$ ln -s ./lesson18/mytest.exe my.exe

image-20231103191421825

直接./my.exe解放双手

image-20231103191536764

这就很像window下的快捷桌面方式(忽略右上角的红色软件,我是爱学习的孩子)

image-20231103191628076

软硬链接的删除:

删除的话可以直接 rm,但是我们还是建议使用专门的 取消链接 的指令:unlink

unlike 文件名

image-20231103191802832

动静态库:

什么是动静态库?

动态库 .so:程序在运行的时才去链接动态库的代码,多个程序共享使用库的代码。

静态库 .a:程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库

一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文
件的整个机器码

动态链接和静态链接:

动态链接:

在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个
过程称为动态链接(dynamic linking)

动态库可以在多个程序间共享,所以 动态链接使得可执行文件更小,节省了磁盘空间。 操作系统采用虚拟内存 (VM) 机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。

静态链接:

静态链接比较暴力,链接时候直接将目标接口的二进制代码全部链接到原文件中去,这也就是静态链接生成的文件这么大的原因了;(毕竟把二进制代码copy过来了)

但是这些都是相对的,有优点就有缺点:

万一动态库路径中的库丢失损坏 ,动态链接的程序到目标位置了,过来用的时候肯定出错了;

静态链接因为编译的时候吧二进制代码考过去了,不依赖原生库,即便原库代码丢失也没事;

生成动静态库:

生成静态库:

$ ar -rc [静态库] [.o]

库的命名以 lib 开头,静态库以 .a 结尾,

image-20231103193821301

此时我们就有了静态库,所谓了静态库就是曾经的源文件最终将它翻译成 .o 打包起来的东西而已。而别人用我们的库,就是在库里找到 .o 然后丢到而可执行程序里就行。

生成动态库:

动态库比静态库要复杂一些,

gcc -fPIC -c myadd.c -o myadd.o

gcc -shared -o libmyadd.so myadd.o

别在于 形成 .o 的时候是需要加上 gcc -fPIC 的,这是为了产生 与位置无关码

image-20231103194631708

使用静态库和动态库:

现在我们站在使用的人的角度,学习如何使用静态库和动态库

使用动态库

-Ⅰ 表示我们的头文件查找的路径

-L 表示库文件搜索的路径

-l 在-L 指定的路径下你要链接哪一个库.
示例:

gcc mytest.c -o mytest -I lib-dyl/include/ -L lib-dyl/lib/ -l mymath

形成可执行程序之后,已经把需要的代码拷贝到我的代码中,运行时不依赖你的库。不需要运行时查找。

为什么动态库会有这个问题?想办法让进程找到动态库即可。

error while loading shared libraries 解决方案:

① 动态库拷贝到系统路径下 /lib64 安装。

② 通过导入环境变量的方式 —— 程序运行的时候,会在环境变量中查找自己需要的动态库路径 —— LD_LIBRARY_PATH。

③ 系统配置文件来做。

不需要运行时查找。

为什么动态库会有这个问题?想办法让进程找到动态库即可。

error while loading shared libraries 解决方案:

① 动态库拷贝到系统路径下 /lib64 安装。

② 通过导入环境变量的方式 —— 程序运行的时候,会在环境变量中查找自己需要的动态库路径 —— LD_LIBRARY_PATH。

③ 系统配置文件来做。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1210711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

根据关键词搜索阿里巴巴商品数据列表接口|阿里巴巴商品列表数据接口|阿里巴巴商品API接口|阿里巴巴API接口

阿里巴巴也提供了根据关键词搜索商品数据列表的接口&#xff0c;方便开发者根据关键词搜索商品并进行相关操作。 请求参数可以包括&#xff1a; q&#xff1a;搜索关键字 start_price&#xff1a;开始价格 end_price&#xff1a;结束价格 page&#xff1a;页码 cat&#xff1…

Live800:2023年客服团队管理有哪些思路和方法?

在数字化时代&#xff0c;客服团队成为企业与客户之间的重要桥梁。随着技术不断发展&#xff0c;客服团队管理也在不断进化。到了2023年&#xff0c;最新的客服团队管理将会有哪些思路和方法呢&#xff1f; 一、智能化客服系统 随着人工智能技术的不断发展&#xff0c;智能化客…

超声波清洗机的工作原理是什么样的?值得入手的超声波清洗机推荐

超声波清洗机最常见的应该是在眼镜店了吧&#xff0c;眼镜店用来清洗眼镜频率非常高的&#xff01;超声波清洗机在清洁方面也是非常快速、高效的&#xff01;像眼镜党配戴眼镜脏的第一时间就会想到去眼镜店清洗&#xff0c;但也有很多朋友是随便清洗一下就了事了&#xff0c;其…

大模型的全面回顾,看透大模型 | A Comprehensive Overview of Large Language Models

大模型的全面回顾&#xff1a;A Comprehensive Overview of Large Language Models 返回论文和资料目录 论文地址 1.导读 相比今年4月的中国人民大学发表的大模型综述&#xff0c;这篇综述角度更侧重于大模型的实现&#xff0c;更加硬核&#xff0c;更适合深入了解大模型的一…

运动型蓝牙耳机什么牌子好?市面上热门的运动耳机推荐

​随着生活节奏的加快&#xff0c;越来越多的人开始关注健康和运动。而在运动的时候&#xff0c;佩戴耳机听音乐已经成为了很多人的选择。但是&#xff0c;市面上的运动耳机种类繁多&#xff0c;如何选择一款适合自己的呢&#xff1f;下面&#xff0c;我推荐几款市面上热门的运…

开源社区团购小程序源码系统 商品管理+订单管理+会员管理 带完整搭建教程

社区团购作为一种新型的电商模式&#xff0c;逐渐成为了人们日常生活的一部分。而开源社区团购小程序源码系统&#xff0c;更是受到了广大开发者的热烈欢迎。下面罗峰给大家介绍一款完整的开源社区团购小程序源码系统&#xff0c;包括商品管理、订单管理、会员管理等功能&#…

LCD液晶屏维修日记

有一台显示器不亮了&#xff0c;怀疑是电源接头松了&#xff0c;于是准备自己维修一下&#xff0c;哪知道事情不是这么简单的。于是折腾之路开始了… 拆开液晶显示屏后&#xff0c;发现结构非常高的简单&#xff0c;就两大部分&#xff0c;一个是液晶屏控制板&#xff0c;一个是…

没有设计经验的新手如何制作一本电子画册?

移动信息时代&#xff0c;电子画册逐渐取代纸质画册&#xff0c;它无需印刷&#xff0c;环保节能&#xff0c;也无需随身携带&#xff0c;通过手机/平板/电脑等设备即可随时在线浏览阅读&#xff0c;十分方便。那没有设计经验的新手如何制作一本这样随身携带方便的电子画册呢&a…

基于Qt 多线程(继承 QObject 的线程)

​ 继承 QThread 类是创建线程的一种方法,另一种就是继承QObject 类。继承 QObject 类更加灵活。它通过 QObject::moveToThread()方法,将一个 QObeject的类转移到一个线程里执行。恩,不理解的话,我们下面也画个图捋一下。 通过上面的图不难理解,首先我们写一个类继承 QObj…

苹果Apple Pay怎么用?1分钟掌握苹果支付技巧!

随着移动支付的普及&#xff0c;越来越多的苹果用户开始使用Apple Pay进行日常消费。Apple Pay作为苹果公司推出的移动支付工具&#xff0c;具有简单快捷、安全性高、应用场景广泛等优点。苹果apple pay怎么用&#xff1f;今天&#xff0c;小编将为大家分享如何使用Apple Pay&a…

Qt Jom Parallel Builds 并行构造

1.Qt官网下载 Jom - Qt Wiki 下载jom源码 git clone git://code.qt.io/qt-labs/jom.git 2.生成makefile qmake -r 进入jom源码目录 执行qmake -r 3.编译 nmake jom编译成功 4.复制到qmake所在目录并运行

小学生写作业用什么台灯好?专业的学生台灯推荐

说到台灯相信大家都不陌生&#xff0c;不管是办公族还是学生基本都会备上一台。而且现在的孩子很多都是存在视力问题的&#xff0c;主要的原因就是学习压力太大了&#xff0c;用眼时间过长导致的。所以很多家长选择给孩子使用更为专业的护眼台灯。 不过目前市面上的灯具也是良莠…

【论文阅读】(CGAN)Conditional Generative Adversarial Nets

论文地址&#xff1a;[1411.1784] Conditional Generative Adversarial Nets (arxiv.org) - 条件生成式对抗网络&#xff1b; 解读&#xff1a; 这篇论文中的Conditional GAN和原生GAN在结构上没有太大差别&#xff0c;时间也是紧随着原生GAN出来的&#xff0c;它的思想应该后…

哪种灯光护眼效果好?考研必备护眼灯推荐

日常生活中&#xff0c;灯光对于我们来说是非常重要的&#xff0c;尤其是晚上&#xff0c;不管是学习还是办公都需要合适的光线环境&#xff0c;而台灯就是最好的一个选择。因此也不少学生党或者上班族都会备上一盏台灯。 不过台灯也不是随便挑选一台就可以的&#xff0c;如果…

PC端同花顺筹码峰(平均成本)的历史换手衰减系数如何设置

一、筹码峰设置 首先&#xff0c;打开同花顺客户端&#xff0c;找到筹码峰&#xff0c;点击设置按钮。 这时候打开弹框如下&#xff0c;其中【筹码分布】公式就是你需要修改的内容&#xff08;我的筹码分布是已修改过的&#xff09;&#xff1b; 左上角可以搜索"CM&q…

时间序列基础->数据标签、数据分割器、数据加载器的定义和讲解(零基础入门时间序列)

一、本文介绍 各位小伙伴好&#xff0c;最近在发时间序列的实战案例中总是有一些朋友问我时间序列中的部分对数据的操作是什么含义&#xff0c;我进行了挺多的介绍和讲解但是问的人越来越多&#xff0c;所以今天在这里单独发一篇文章来单独的讲一下时间序列中对数据的处理操作…

挂耳式运动耳机哪个品牌好?5款公认好用的运动耳机推荐

​在现代社会&#xff0c;耳机已经成为了人们生活中必不可少的数码设备。在运动的时候&#xff0c;佩戴耳机更是成为了很多人的标配。但是&#xff0c;市面上的运动耳机种类繁多&#xff0c;如何选择一款适合自己的呢&#xff1f;今天我为大家挑选了5款公认好用的运动耳机&…

自动化测试:webdriver的断言详解

前言 在编写自动化测试脚本时&#xff0c;为了使“机器”去自动辨识test case的执行结果是True还是False&#xff0c;一般都需要在用例执行过程中获取一些信息&#xff0c;来判断用例的执行时成功还是失败。 判断成功失败与否&#xff0c;就涉及到断言。webdriver的断言使用有…

二维码智慧门牌管理系统升级解决方案:标准地址ID查询服务:高效、精准

文章目录 前言一、解决查询效率低下的问题二、提高信息精准度三、应用案例 前言 随着城市的发展和信息化步伐的加快&#xff0c;二维码智慧门牌管理系统已成为各大城市管理部门和企事业单位的必备工具。然而&#xff0c;实际应用中存在一些问题&#xff0c;如查询效率低下、信…

解决Window11 C:\Windows\System32\drivers\etc hosts 无法编辑问题

点击更多选项&#xff1a; 点击更多&#xff1a; 取消勾选 点击安全&#xff1a; 勾选 编辑和写入&#xff1a; 直接点同意&#xff1a; 现在就好了&#xff01; 搜索笔记本 以管理员身份运行 编辑完 保存就行了