基础IO(三)

news2024/12/25 8:56:29

软硬链接和动静态库

  • 1.软硬链接
  • 2.动态库和静态库
    • 2.1理解现象
    • 2.2静态库的设计
    • 2.3动态库
    • 2.4动态库的配置
    • 2.5动态库的理解

🌟🌟hello,各位读者大大们你们好呀🌟🌟
🚀🚀系列专栏:【Linux的学习】
📝📝本篇内容:软硬链接;动静态库
⬆⬆⬆⬆上一篇:基础IO(二)
💖💖作者简介:轩情吖,请多多指教(> •̀֊•́ ) ̖́-

1.软硬链接

①软链接是一个独立的链接文件,有自己的inode编号,因此也有自己的inode属性和内容,其内容是自己所指向的文件的路径,类似于windows快捷方式
创建软链接命令:ln -s
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
②硬链接和目标文件共用同一个inode编号,因此硬链接一定和目标文件使用同一个inode(属性)。硬链接没有独立的inode,在当前目录的内容中建立新的文件名和老的inode的映射关系
创建硬链接的命令:ln
在这里插入图片描述
仔细观察红色圈出来的地方,为什么它是2?
其实它指的是硬链接数,在inode属性中有一个来变量记录这个
在这里插入图片描述
在这里插入图片描述
大家注意看红色圈出来的地方,其中创建一个dir目录后,它的硬链接数为2,这是因为它本身是一个,再加上其内部的 . .,用来切换到上一级路径,也是指向这个目录,因此为2,。而这个目录中的 . 为3个硬链接数的原因是本身一个,上一级目录下它本身的目录名算一个,再者dir中有一个. .切换到上级目录也算一个。
但是只有OS能给目录建立硬链接,因为我们自己建立的容易造成环路路径问题(例如使用find,会引起死循环)

2.动态库和静态库

系统已经预装了C/C++的头文件和库文件,头文件是提供方法说明,库提供方法的实现,头和库是有对应关系的,是要组合在一起使用的
头文件是在预处理阶段就引入的,链接本质其实是链接库
查看C动态库:/usr/lib64/libc* 或 /lib64/libc*
在这里插入图片描述
在这里插入图片描述

查看C++动态库:/usr/lib64/libstdc* 或 /lib64/libstdc*
在这里插入图片描述
在这里插入图片描述

查看头文件:/usr/include
在这里插入图片描述

2.1理解现象

a.所有,我们在VS2019/2022下安装开发环境——安装编译器软件,安装要开发的语言配套的库和头文件
b.我们在使用编译器,都会有语法的自动提醒功能,需要包含头文件的。语法的提醒本质:编译器或编辑器,它会自动的将用户输入的内容,不断在被包含的头文件中进行搜索,自动提醒功能是依赖头文件的
c.我们在写代码的时候,我们的环境怎么知道我们的代码中有哪些地方有语法报错?其实是有命令行模式,还有其他自动化的模式帮我们不断在进行语法检查
d.库:静态库(.a);动态库(.so)
e.库名:lib stdc++.so.6
f.一般云服务器,默认只会存在动态库,不存在静态库,静态库需要单独安装

2.2静态库的设计

我们首先写一个函数的实现
在这里插入图片描述
再写一个普通的.c文件,其中包含了函数原型的头文件

在这里插入图片描述
在这里插入图片描述
此时我们再考虑一个问题,当我们的c文件在编译时,只要有函数的声明就不会出现报错,因为编译器认为,在后面链接的时候能够找到对应的实现,也就说到链接阶段时,.c文件已经变成了.o文件。因此我们可以认为我们的静态库里内容也应该为.o再被封装。
静态库设计命令:ar -rc libxxxx.a xxx.o
在这里插入图片描述
当我们有了库,接下来就要将库引入我们的项目,必须让编译器找到头文件和库文件
第三方库的使用:
①需要指定的头文件和库文件
②如果没有默认安装到系统gcc、g++默认的搜索路径下,用户必须指明对应的选项,来告诉编译器:a.头文件在哪 b.库文件在哪 c.库文件具体是谁
在这里插入图片描述
③将我们下载下来的库和头文件,拷贝到系统默认路径下——linux下安装库,对任何软件而言,安装和卸载的本质就是拷贝到系统特定的路径下
④如果我们安装的库是第三方的(除语言、操作系统接口)库,我们要正常使用,即便是已经全部安装到了系统中,g++/gcc必须要用-l指明具体库的名称
理解现象:
无论你是从网络中直接下好的库,或者是源代码(编译方法)——>make install 安装的命令——>cp,安装到系统中,我们安装大部分指令、库等都需要sudo或root操作

2.3动态库

在形成动态库时,我们的.o文件不能再是普通的二进制,而是与位置无关码
在这里插入图片描述
在这里插入图片描述
上图是生成动态库的命令
在这里插入图片描述
可是为什么生成了可执行程序执行不了呢,这是因为仅仅是把动态库告诉了编译器,并没有告诉OS。OS运行的时候,因为.so并没有在系统的默认路径下,所以OS找不到。而静态库的链接原则是将用户使用的二进制代码直接拷贝到目标可执行程序中,而动态库不会

2.4动态库的配置

①环境变量:LD_LIBRARY_PATH(临时方案)
在这里插入图片描述
②软链接
在这里插入图片描述
在这里插入图片描述
③配置文件方案
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5动态库的理解

静态链接形成的可执行程序本身就有静态库中对应的方法实现,但是静态链接非常占用资源(磁盘、可执行程序体积变大、加载占用内存、下载周期变长、占用网络资源)
在这里插入图片描述
其中我们要先明白,代码数据本身就是在物理内存上的,之后在通过映射到虚拟地址空间
我们的可执行程序中的并没有函数的实现,只有函数的地址,就如上图的例子,进程A中有一个add函数,他只有一个地址,当运行进程A时,创建task_struct,并且有了虚拟地址空间,此时进程A中由于使用了math这个动态库,因此把add函数加载到内存中,并映射到内存映射区(共享区),当我们把库加载到内存,映射到进程的地址空间后,我们的代码执行库中的方法,就依旧还是在自己的地址空间内进行了函数跳转。
但是我们这样做必定会遇到一个问题:不同的进程,运行程度不同,当加载好几个进程,需要使用的第三方库是不同的,注定了每一个进程的共享空间中空闲位置是不确定的。因此地址分为绝对编址和相对编址,动态库中的所有编址,都是偏移量,默认从0地址开始。当一个库,真正的被映射进地址空间的时候,它的起始地址才能真正确定,所谓之前提到的于位置无关码,其实就是动态库中地址都是偏移量
补充:①动态库和静态库同时存在,系统默认采用动态链接
②编译器,在链接的时候,如果提供的库既有动又有静,优先动,只有静,没法,只能静态链接

🌸🌸基础IO(三)的知识大概就讲到这里啦,博主后续会继续更新更多Linux的相关知识,干货满满,如果觉得博主写的还不错的话,希望各位小伙伴不要吝啬手中的三连哦!你们的支持是博主坚持创作的动力!💪💪

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

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

相关文章

Kafka中时间轮算法的使用

简介: Kafka的心跳处理机制竟然用到了时间轮算法? Broker端与客户端的心跳在Kafka中非常的重要,因为一旦在一个心跳过期周期内(默认10s),Broker端的消费组组协调器(GroupCoordinator)会把消费者从消费组中移除,从而触…

U盘数据丢失怎么恢复?优盘数据恢复,看这4个方法!

案例:U盘数据丢失怎么恢复? 【我的U盘里真的存了很多重要的视频和图片,但是前段时间U盘好像中病毒了,导致我很多的图片都丢失了!大家有什么好方法可以帮我恢复U盘中的重要数据吗?真的超级感谢!…

ZED使用指南(五)

六、其他 1、相机 (1)选择视频模式 左右视频帧同步,以并排格式作为单个未压缩视频帧流式传输。 在ZED Explorer或者使用API可以改变视频的分辨率和帧率。 (2)选择输出视图 ZED能以不同的格式输出图像,…

基于Java+SpringBoot+Mybaties+Layui 小区物业管理系统设计与实现

一.项目介绍 小区物业管理系统分为两类,一类是业主、一类是管理员 业主的功能有:小区首页、房屋购买、车位购买、公告通知、出入登记、投诉服务、报修服务、关于我们 管理员的功能有:楼宇管理、住房管理、车位管理、物业管理、收费项目管理、…

yolov8seg模型转onnx转ncnn

yolov8是yolo的最新版本,可做图像分类,目标检测,实例分割,姿态估计。 主页地址 这里测试一个分割模型。 模型如下 选yolov8n-seg模型,转成onnx,再转ncnn测试。 yolov8s-seg的ncnn版可以直接用这个 如果用…

Linux代码性能分析工具

一、gperftools 1、gperftools安装 docker下需要安装gperftools、ghostscript、graphviz gperftools: # 从github下载gperftools源码并解压 wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.9.1/gperftools-2.9.1.tar.gz tar -x…

(1分钟速览)图像金字塔对比--光流法and fast角点

图像金字塔对比--光流法and fast角点 ​ fast角点以计算快为出名,但是其不具有尺度不变性和旋转不变性。针对尺度不变性,其说的是对于远处和近处相同的一个物体,可能近处能够检测出来有角点,但是放远了以后就不一定能检测出来角点…

良好的水生态环境对人居生活的帮助

水是生命之源,良好的水源生态,对于人们的生活健康提供很大的作用,在农村污水处理中,利用污水处理设备进行水源净化排放是很常用的手段。 良好的水环境对人居生活有很多的帮助,主要包括以下几个方面: 1.提供…

类和对象 - 中(C++)

目录 类的6个默认成员函数 一、构造函数 概念 特性 二、析构函数 特性 三、拷贝构造函数 概念 特性 四、赋值运算符重载 运算符重载 前置和后置重载​​​​​​​ 赋值运算符重载 五、& 取地址操作符重载 六、const & 取地址操作符重载 认识const成员 const & 运…

第七章 TensorFlow实现卷积神经网络--代码调试

注:实验工具为jupyter,该python环境为3.7并安装了1.14.0版本的tensorflow ,这是本人基于最新版的anaconda下新建的环境,至于在头歌环境平台及其他平台并未验证,而我们需要安装和更新包也需要在自己新建的环境命令行下才有效。 //这…

CloudCompare二次开发之如何通过PCL进行点云采样?

文章目录 0.引言1.CloudCompare界面设计采样(sample)按钮2.RandomSample随机下采样3.VoxelGrid体素下采样4.UniformSampling均匀采样5. MovingLeastSquares增采样6.SamplingSurfaceNormal非均匀体素采样 0.引言 因笔者课题涉及点云处理,需要通过PCL进行点云数据一系…

MySQL之数据目录

前言 本文章收录在MySQL性能优化原理实战专栏,点击此处查看更多优质内容。 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的:从根儿上理解MySQL》 我们知道像InnoDB、MyISAM这样的存储引擎都是把表存储在磁盘上的,而操作系统用来管理磁盘的那…

C. Classy Numbers(dfs构造 + 组合数学)

Problem - C - Codeforces 让我们称某个正整数为“优美的”,如果它的十进制表示中不超过3个数字不为零。例如,数字4、200000、10203是优美的,而数字4231、102306、7277420000则不是。 给定一个区间[L;R],请计算在此区间内有多少个…

Linux awk流编辑器

awk流编辑器 工作原理 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。 sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理…

pix2pix

Image-to-Image Translation Using Conditional Adversarial Networks 1: pix2pix也是CGAN的一种,pix2pix可以学习输入到输出的映射,同时也学习了损害函数去训练这个映射。这是一个大一统的方法去实现从标签合成图像,从边界图重建…

【FMC139】多通道采集--基于 VITA57.1 标准的4 路500MSPS/1GSPS 14 位AD 采集子卡模块(AD9680/HMC7044)

板卡概述 FMC139 是一款基于VITA57.1 标准规范的JESD204B 接口FMC 子卡模块,该模块可以实现4 路14-bit、500MSPS/1GSPSADC采集功能。该板卡ADC 器件采用ADI 公司的AD9680 芯片,全功率-3dB 模拟输入带宽可达2GHz。该ADC 与FPGA 的主机接口通过8通道的高速串行GTX 收…

AutoSAR PNC和ComM

文章目录 PNC和ComMPNC管理NM PDU结构及PNC信息位置如何理解节点关联PNCPNC状态管理 ComM 通道状态管理 PNC和ComM PNC 和 ComM层的Channel不是一个概念,ComM的Channel对应具体的物理总线数。 在ComM模块中,一个Channel可以对应一个PNC,也可…

AIGC产业研究报告2023——语言生成篇

易观:今年以来,随着人工智能技术不断实现突破迭代,生成式AI的话题多次成为热门,而人工智能内容生成(AIGC)的产业发展、市场反应与相应监管要求也受到了广泛关注。为了更好地探寻其在各行业落地应用的可行性…

java字类与继承

文章目录 一、Java子类与父类二、Java子类的继承性三、Java子类与对象四、Java成员变量的隐藏和方法重写五、Java super关键字六、Java final关键字七、Java对象的上转型对象八、Java继承与多态九、Java abstract类和abstract方法总结 一、Java子类与父类 继承就是一种由已有的…

电脑无法安装软件?不用慌,这样做可以快速解决!

案例:为什么我的电脑不能下载软件? 【在学习的过程中,需要下载一些软件工具。按照老师给的软件步骤,电脑还是无法安装软件,有小伙伴知道怎么回事吗?】 在使用电脑的过程中,很多小伙伴都会遇到…