什么样的网站容易做seo/网络营销策略理论有哪些
标题:[Linux] linux 软硬链接与动静态库
个人主页@水墨不写bug
(图片来源于网络)
/** _oo0oo_* o8888888o* 88" . "88* (| -_- |)* 0\ = /0* ___/`---'\___* .' \\| |// '.* / \\||| : |||// \* / _||||| -:- |||||- \* | | \\\ - /// | |* | \_| ''\---/'' |_/ |* \ .-\__ '-' ___/-. /* ___'. .' /--.--\ `. .'___* ."" '< `.___\_<|>_/___.' >' "".* | | : `- \`.;`\ _ /`;.`/ - ` : | |* \ \ `_. \_ __\ /__ _/ .-` / /* =====`-.____`.___ \_____/___.-`___.-'=====* `=---='* * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* * 佛祖保佑 永不宕机 永无BUG*/
目录
(一)软硬链接
(1)见一见软硬链接
(2)软硬链接的本质?
(3)软硬链接的应用?
a.软连接
b.硬连接
(二)动静态库
(1)什么是库?
(2)如何制作动静态库?
a,生成静态库
查看静态库中的目录列表
使用静态库
b,生成动态库
使用动态库
(3)库的路径搜索
正文开始:
(一)软硬链接
(1)见一见软硬链接
在具体讲解软硬链接之前,我们抛弃令人费解的概念不谈,先见一见软硬链接。
场景一:我们在一个项目目录中,编译编写的代码,形成mytest可执行程序:
但是我们想要在当前目录而不是在test_link目录中找到mytest,这就需要一个快捷方式,如何创建一个快捷方式?
场景二:Linux目录默认都会有当前目录和上一级目录,可是为什么呢?
在Linux目录下,我们可以通过指令创建软链接:
建立软链接:
ln -s 目标文件的位置和文件名 建立的软连接的名称
建立硬链接:
ln 目标文件的位置和文件名 建立的软连接的名称
对于场景一,可以在test_link的同级目录中创建一个软链接:
这样,对于建立的软链接的访问,就类似于直接对mytest的访问:
对于场景二,每一个目录中的本目录和上一级目录本质就是一个硬连接。
(2)软硬链接的本质?
软链接:
软链接是一个独立的文件,因为软链接形成的链接有独立的inode number。
硬链接:
硬连接不是一个独立的文件,因为硬链接没有独立的inode number。
软链接的内容是目标文件所对应的路径字符串,类似于windows的快捷方式。
硬连接是文件名和inode number的映射关系,添加硬连接就是在指定目录下,添加一个新的文件名与inode number的映射关系。
(3)软硬链接的应用?
a.软连接
i,链接各种库,linux的各种指令,本质上就是一个个的可执行程序文件,这些指令的运行需要库文件的支持,才能正常运行。
ii,创建快捷方式,可以帮我们快速找到深路径的文件。
b.硬连接
1)任何一个目录,刚开始创建的时候,我们会发现硬连接引用计数为2:
在目录中创建目录,会使其引用计数+1,因为新建的目录中会有指向本目录的硬连接。
于是,可以推导出:
目录内有几个目录,等于其引用计数-2
同时,需要注意,linux中不能给目录建立硬连接,防止系统在查找文件的时候形成路径环绕。
(二)动静态库
接下来的分享以笔记形式进行!
/** ::* :;J7, :, ::;7:* ,ivYi, , ;LLLFS:* :iv7Yi :7ri;j5PL* ,:ivYLvr ,ivrrirrY2X,* :;r@Wwz.7r: :ivu@kexianli.* :iL7::,:::iiirii:ii;::::,,irvF7rvvLujL7ur* ri::,:,::i:iiiiiii:i:irrv177JX7rYXqZEkvv17* ;i:, , ::::iirrririi:i:::iiir2XXvii;L8OGJr71i* :,, ,,: ,::ir@mingyi.irii:i:::j1jri7ZBOS7ivv,* ,::, ::rv77iiiriii:iii:i::,rvLq@huhao.Li* ,, ,, ,:ir7ir::,:::i;ir:::i:i::rSGGYri712:* ::: ,v7r:: ::rrv77:, ,, ,:i7rrii:::::, ir7ri7Lri* , 2OBBOi,iiir;r:: ,irriiii::,, ,iv7Luur:* ,, i78MBBi,:,:::,:, :7FSL: ,iriii:::i::,,:rLqXv::* : iuMMP: :,:::,:ii;2GY7OBB0viiii:i:iii:i:::iJqL;::* , ::::i ,,,,, ::LuBBu BBBBBErii:i:i:i:i:i:i:r77ii* , : , ,,:::rruBZ1MBBqi, :,,,:::,::::::iiriri:* , ,,,,::::i: @arqiao. ,:,, ,:::ii;i7:* :, rjujLYLi ,,:::::,:::::::::,, ,:i,:,,,,,::i:iii* :: BBBBBBBBB0, ,,::: , ,:::::: , ,,,, ,,:::::::* i, , ,8BMMBBBBBBi ,,:,, ,,, , , , , , :,::ii::i::* : iZMOMOMBBM2::::::::::,,,, ,,,,,,:,,,::::i:irr:i:::,* i ,,:;u0MBMOG1L:::i:::::: ,,,::, ,,, ::::::i:i:iirii:i:i:* : ,iuUuuXUkFu7i:iii:i:::, :,:,: ::::::::i:i:::::iirr7iiri::* : :rk@Yizero.i:::::, ,:ii:::::::i:::::i::,::::iirrriiiri::,* : 5BMBBBBBBSr:,::rv2kuii:::iii::,:i:,, , ,,:,:i@petermu.,* , :r50EZ8MBBBBGOBBBZP7::::i::,:::::,: :,:,::i;rrririiii::* :jujYY7LS0ujJL7r::,::i::,::::::::::::::iirirrrrrrr:ii:* ,: :@kevensun.:,:,,,::::i:i:::::,,::::::iir;ii;7v77;ii;i,* ,,, ,,:,::::::i:iiiii:i::::,, ::::iiiir@xingjief.r;7:i,* , , ,,,:,,::::::::iiiiiiiiii:,:,:::::::::iiir;ri7vL77rrirri::* :,, , ::::::::i:::i:::i:i::,,,,,:,::i:i:::iir;@Secbone.ii:::*/
(还是讲解一下比较好,所以还是正常的blog形式)
(1)什么是库?
我们平时使用的各种库,但是这些库到底是怎么运行的?
库本质是语言层面的开发者写好并编译形成的.o 文件(可重定向目标文件),以及头文件。对于头文件,本质上是一个手册,因为我们用户不能直接看懂.o文件(二进制的文件),所以这个.o文件到底有什么作用,我们用户不知道如何使用这个库!!于是需要头文件来解释,头文件为用户提供了库文件的使用方法(比如函数声明,宏定义,类声明等)。
.o文件提供了实现,.h文件提供了说明。
用户只需要补上一个main函数文件,在这个文件中调用头文件提供的方法,然后和 库提供的.o 文件进行链接,最终就可以形成我们自己的可执行程序。
总而言之,所谓库文件,本质就是把多个.o文件打包。目的是提高开发效率。
Linux下的动静态库:
静态库(.a):程序在编译链接的时候把库的代码拷贝到可执行文件中,程序运行的时候将不再需要静态库。
动态库(.so) :程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。(动态库删掉后程序无法正常运行) 一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码。 在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为 动态链接(dynamic linking) 。
库的命名规则:
如:libc.so -> c库,去掉前缀lib,去掉后缀.so,.a
动态库的优势:(动态库使用较多,为什么?)
动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。
操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间 ,所以在实际场景中,项目大多使用动态库。(链接库的内存层面具体细节在以后会分享)
(2)如何制作动静态库?
我们实现了add.c add.h sub.c sub.h 并自己添加了main函数,如何生成自己的静态库,并在编译后链接到main文件中?
ddsm@ddsm-alicloud:~/_10_29_blog$ ls
add.c add.h main.c sub.c sub.h
ddsm@ddsm-alicloud:~/_10_29_blog$ gcc -c add.c -o add.o
ddsm@ddsm-alicloud:~/_10_29_blog$ gcc -c sub.c -o sub.o
a,生成静态库
ddsm@ddsm-alicloud:~/_10_29_blog$ ar -rc libmymath.a add.o sub.o
ar是gnu归档工具,rc表示(replace and create)
查看静态库中的目录列表
ddsm@ddsm-alicloud:~/_10_29_blog$ ar -tv libmymath.a
rw-r--r-- 0/0 1240 Oct 15 16:53 2024 add.o
rw-r--r-- 0/0 1240 Oct 15 16:53 2024 sub.o
t:列出静态库中的文件
v:verbose 详细信息
使用静态库
ddsm@ddsm-alicloud:~/_10_29_blog$ gcc main.c -L. -lmymath
-L 指定库路径
-l 指定库名
b,生成动态库
ddsm@ddsm-alicloud:~/_10_29_blog$ gcc -fPIC -c sub.c add.c ddsm@ddsm-alicloud:~/_10_29_blog$ gcc -shared -o libmymath.so*.o ddsm@ddsm-alicloud:~/_10_29_blog$ ls add.c add.h add.o libmymath.so main.c sub.c sub.h sub.o
shared: 表示生成共享库格式
fPIC:产生位置无关码(position independent code)
库名规则:libxxx.so
使用动态库
L:链接库所在的路径.
l:链接动态库,只要库名即可(去掉lib以及版本号)
运行动态库
1、拷贝.so文件到系统共享库路径下, 一般指/usr/lib
2、更改 LD_LIBRARY_PATHddsm@ddsm-alicloud:~/_10_29_blog$ export LD_LIBRARY_PATH=. ddsm@ddsm-alicloud:~/_10_29_blog$ gcc main.c -lmymath ddsm@ddsm-alicloud:~/_10_29_blog$ ./a.out add(10, 20)=30 sub(100, 20)=80
3、ldconfig 配置/etc/ld.so.conf.d/,ldconfig更新
[root@localhost linux]# cat /etc/ld.so.conf.d/bit.conf /root/tools/linux [root@localhost linux]# ldconfig
(3)库的路径搜索
无论是动态库还是静态库,在编译的时候都需要告诉编译器库的位置信息,一旦编译成功,静态链接的程序可以不受库的限制,可以随意使用。
首先需要告诉编译器动态库的位置,才能编译成功。但是这只是第一步。虽然编译成功,但是OS无法找到库,依然是无法正常运行程序的。
如何让操作系统会在如下的目录中查找库:
1)由环境变量指定的目录 (LIBRARY_PATH)
2)由系统指定的目录
/usr/lib
/usr/local/lib
可以通过多种方式让操作系统找到库,根据前文的讲解,你或许已经知道了如何操作,这里给出5种方法:
完~
未经作者同意禁止转载
相关文章:

[Linux] linux 软硬链接与动静态库
标题:[Linux] linux 软硬链接与动静态库 个人主页水墨不写bug (图片来源于网络) /** _oo0oo_* o8888888o* 88" . "88* (| -_- |)* …...

GitHub Actions的 CI/CD
GitHub Actions 是一个强大的 CI/CD 工具,适用于自动化各种开发任务。GitHub Actions 的原理是基于事件驱动的自动化流水线工具,通过定义触发条件和执行步骤,可以让项目在特定条件下自动运行一系列操作,比如构建、测试、部署等。 …...

doris 表结构批量导出
导出 test 数据库中的 table1 表:mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables table1 导出 test 数据库中的 table1 表结构:mysqldump -h127.0.0.1 -P9030 -uroot --no-tablespaces --databases test --tables tab…...

linux查看文件命令
查看文件命令 显示命令 cat 语法:cat 【选项】 文件 选项 命令含义n显示行号包括空行b显示行号不包括空行s压缩空行为一行A显示隐藏字符 cat -n 文件:显示行号包括空行 cat -b 文件 cat -s 文件 cat -A 文件 more和less是 分页查看 tac和rev都…...

【2023工业图像异常检测文献】DiAD: 基于扩散模型的多类异常检测方法
DiAD: A Diffusion-based Framework for Multi-class Anomaly Detection 1、Background 当前主流的三种异常检测方法: 基于合成的方法:在正常图像上合成异常,通过训练模型识别这些合成的异常来提高检测和定位能力。基于嵌入的方法ÿ…...

三相继电保护机 继电器保护校验仪 微机继电保护测试仪
性能特点 电压电流输出灵活组合 输出达4相电压3相电流,可各种组合实现常规4相电压3相电流型输出模式,既可兼容传统的各种试验方式,也可方便地进行三相变压器差动试验和厂用电快切和备自投试验。 操作方式装置直接外接笔记本电脑或台式机进行…...

MyEclipse中讲解Git使用——结合GitLab
1、什么是Git Git是分布式版本控制系统 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 2、在myeclipse安装Git插件 下载该文件,将egit.zip解压放入 myeclipse安装路径>dropins>下重新启动myeclipse EGit -…...

pdf转为txt文本格式并使用base64加密输出数据
第一步,pom.xml中引入jar包 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency> 第二步 package org.example.test.example.changefile;…...

SpringBoot篇(运维实用篇 - 临时属性)
目录 一、临时属性设置 1. 简介 2. 属性加载优先级 那是否还有其他的配置方式呢? 3. 知识小结 二、开发环境中使用临时属性 1. 如何操作 2. 知识小结 3. 思考 三、配置文件分类 1. 简介 2. 4个级别 3. 为什么设计多种配置文件? 一个典型的应…...

MySQL定时异机备份
场景:将A机器MySQL数据库部分表每日定时备份到B机器上 (只适用于Linux) 实现方式算是比简单了,就是用mysqldump生成文件,使用scp命令传输到另一台机器上。 1. 编写备份shell脚本 在A机器新建脚本 (当然没有vim的话vi…...

MMA: Multi-Modal Adapter for Vision-Language Models
两个观察 图1所示。各种基于transformer的CLIP模型中不同层的数据集级识别精度。这个实验是为了确定样本属于哪个数据集。我们用不同的种子运行了三次,并报告了每层识别精度的平均值和标准差。 X E m b e d XEmbed XEmbed是指变压器块之前的文本或图像嵌入层&#x…...

uniapp通过id获取div的宽度,高度,位置等(应该是 任意平台都通用 )
uniapp通过id获取div的宽度,高度,位置等(应该是 任意平台都通用 ) <template><view class"" id"domId"></view> </template>// 如果获取的dome高度等不对,还需要加上延迟…...

Python Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用
Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用 近年来,Transformer 模型在自然语言处理(NLP)领域取得了巨大成功,为任务如翻译、生成文本、问答和情感分析带来了显著的性能提升。本文将介绍 Tr…...

【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)
文章目录 在写redis集群搭建的时候,有提到过使用nfs做storageclass,那时候kubernetes是1.20版本,https://dongweizhen.blog.csdn.net/article/details/130651727 现在使用的是kubernetes 1.29版本,根据之前的修改方式并未生效,反而提示:Error: invalid argument "Re…...

使用 Pandas 进行时间序列分析的 10个关键点
使用Pandas进行时间序列分析的10个关键点(由于篇幅限制,这里调整为10个,但实际操作中可能涉及更多细节)如下: 1. 创建时间序列数据 时间序列数据是指在多个时间点上形成的数值序列。在Pandas中,可以使用t…...

使用 Mermaid 语言描述 AGI 系统架构图
使用Mermaid语言描述AGI系统架构图 一、整体架构概述 以下是一个简化的AGI(Artificial General Intelligence,通用人工智能)系统架构的Mermaid描述。该系统主要包括数据收集与预处理、模型训练、推理与决策以及交互接口等模块,各…...

绘制线性可分支持向量机决策边界图 代码解析
### 绘制线性可分支持向量机决策边界图 def plot_classifer(model, X, y):# 超参数边界x_min -7x_max 12y_min -12y_max -1step 0.05# meshgridxx, yy np.meshgrid(np.arange(x_min, x_max, step),np.arange(y_min, y_max, step))# 模型预测z model.predict(np.c_[xx.ra…...

No.23 笔记 | WEB安全 - 任意文件漏洞 part 5
本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发,清晰地阐述了文件上传漏洞的定义及其产生的本质原因,同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。 文中还深入解析了…...

EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放
EasyPlayer.js功能: 1、支持解码H.264视频(Baseline, Main, High Profile全支持,支持解码B帧视频) 2、支持解码H.265视频(flv id 12) 3、支持解码AAC音频(LC,HE,HEv2 Profile全支持) 4、支持解码MP3音频以及Speex音频格式 5、可…...

WPF数据绑定的五大模式
WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows用户界面的UI框架。它支持数据绑定,允许开发者将UI元素与数据源绑定,从而实现数据和界面的自动同步。WPF数据绑定有几种不同的模式, 以下是五种…...

从零到一:大学新生编程入门攻略与成长指南
文章目录 每日一句正能量前言编程语言选择:为大学新生量身定制Python:简单而强大的选择JavaScript:Web开发的基石Java:面向对象的经典C#:微软的全能选手 学习资源推荐:编程学习的宝藏在线课程教程和文档书籍…...

详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute
目录 前言1. 基本知识2. Demo 前言 原先的permute推荐阅读:详细分析Pytorch中的permute基本知识(附Demo) 1. 基本知识 transpose 是 PyTorch 中用于交换张量维度的函数,特别是用于二维张量(矩阵)的转置操…...

初识WebGL
思路: 构建<canvas>画布节点,获取其的实例。使用getWebGLContext() 拿到画布上下文。拿到上下文用clearColor() 设置背景颜色。最后清空canvas画布,是为了清除颜色缓冲区。 html结构: <!DOCTYPE html> <html lang"en&…...

【力扣】Go语言回溯算法详细实现与方法论提炼
文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…...

「C/C++」C/C++ 之 第三方库使用规范
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

六、元素应用CSS的习题
题目一: 使用CSS样式对页面元素加以修饰,制作“ 旅游攻略 ”网站。如下图所示 运行效果: 代码: <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>旅游攻略</title><…...

正式入驻!上海斯歌BPM PaaS管理软件等产品入选华为云联营商品
近日,上海斯歌旗下BPM PaaS管理软件(NBS)等多款产品入选华为云云商店联营商品,上海斯歌正式成为华为云联营商品合作伙伴。用户登录华为云云商店即可采购上海斯歌的BPM PaaS产品及配套服务。通过联营模式,双方合作能够深…...

使用 Axios 上传大文件分片上传
背景 在上传大文件时,分片上传是一种常见且有效的策略。由于大文件在上传过程中可能会遇到内存溢出、网络不稳定等问题,分片上传可以显著提高上传的可靠性和效率。通过将大文件分割成多个小分片,不仅可以减少单次上传的数据量,降…...

Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP
1 、安装OpenResty 安装使用 OpenResty,这是一个集成了各种 Lua 模块的 Nginx 服务器,是一个以Nginx为核心同时包含很多第三方模块的Web应用服务器,使用Nginx的同时又能使用lua等模块实现复杂的控制。 (1)安装编译工具…...

PART 1 数据挖掘概论 — 数据挖掘方法论
目录 数据库知识发掘步骤 数据挖掘技术的产业标准 CRISP-DM SEMMA 数据库知识发掘步骤 数据库知识发掘(Knowledge Discovery in Database,KDD)是从数据库中的大量数据中发现不明显、之前未知、可能有用的知识。 知识发掘流程(Knowledge Discovery Process)包括属性选择…...