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

这篇具有很好参考价值的文章主要介绍了【Linux】软硬链接 / 动静态库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 软硬链接

1. 硬链接

硬链接(hard link) 可以将它理解为原始文件的别名, 和原始文件使用相同的 inode 编号和 data block.(inode 是文件在该磁盘分区内的唯一标识, 记录着文件的属性等内容; data block 是文件的内容)

可以使用 ln 指令为文件创建一个硬链接.

ln log.txt link.hard

【Linux】软硬链接 / 动静态库,Linux 的学习,linux
当创建一个新的硬链接时, 该文件的硬链接数就会加 1; 删除一个文件时, 该文件的硬链接数就会减 1; 只有硬链接数为 0 时, 才会彻底删除该文件.

实际上, 硬链接文件和原文件是同一个, 所以 inode 和属性会和原文件相同, 并且当一个文件更改内容或属性时, 其他的文件也会随之改变.
【Linux】软硬链接 / 动静态库,Linux 的学习,linux

  • 注:
    用户不可以使用硬链接 链接目录, 操作系统禁止这样的行为;
    硬链接不能跨分区对文件进行链接.(inode 只在分区内唯一)

2. 软链接

软链接 类似 Windows 系统下的快捷方式, 是一个的全新的文件, 并且文件类型为 ‘l’ (链接属性), 内容仅包括所含链接文件的路径名字.
所以软链接能够链接目录, 也能跨区链接; 但当删除或移动原始文件 或路径失效后, 链接文件也随之失效.

使用 ln -s 选项创建软链接

ln -s log.txt link.soft

【Linux】软硬链接 / 动静态库,Linux 的学习,linux
软链接的文件属性, inode 和原文件都不相同, 并且 软链接文件会指向 (->) 源文件.

3. unlink

使用 unlink 指令可以删除链接文件, 也可以删除普通文件.(rm 指令类似, rm 指令也可以删除链接文件)

unlink /*file_name*/

【Linux】软硬链接 / 动静态库,Linux 的学习,linux

4. 目录的硬链接

当新创建一个目录时, 硬链接数默认为 2.
【Linux】软硬链接 / 动静态库,Linux 的学习,linux
因为一个新创建目录时不只在当前目录下创建了 test_dir 和 inode 的映射关系, 在 test_dir 目录中还会创建隐藏的 . 和 inode 的映射关系, 所以硬链接数会增加.
【Linux】软硬链接 / 动静态库,Linux 的学习,linux
若在当前目录下再新建一个下级目录, 那么当前目录的硬链接数就会加 1, 因为下级目录中的 **..**也是当前目录的一个硬链接.

而操作系统不允许用户创建目录的硬链接, 是因为操作系统会将用户创建的目录认为是下级目录, 在遍历搜索文件等情况下, 会造成环路问题.

二. 动静态库

静态库是 文件在编译链接时使用静态链接, 把需要的库文件全部拷贝至可执行文件中, 可执行程序在运行时不依赖其他文件; 在 Linux 下后缀为 “.a”, 在 Windows 下后缀为 “.lib”.

动态库也被称为共享库, 可执行程序会在运行时动态链接 动态库, 多个可执行程序可以同时调用动态库; 动态库在 Linux 下后缀为 “.so”,在 Windows 下后缀为 “.dll”.

1.1 静态库制作

静态库就是将实现方法的源文件打包为一个文件.

先将源文件编译为 .o 文件
【Linux】软硬链接 / 动静态库,Linux 的学习,linux
之后使用 ar 指令打包即可.

//ar [选项] [库名] [依赖文件]
ar -rc libFunc.a Add.o Sub.o	// -r replace, -c create  // -rc 创建或替换库文件

【Linux】软硬链接 / 动静态库,Linux 的学习,linux

1.2 静态库使用

由于编译器默认不识别第三方的库文件, 直接编译会报错.
【Linux】软硬链接 / 动静态库,Linux 的学习,linux
所以编译时需要将库文件的路径和文件名一起作为参数传入 gcc/g++ 中.

-I(大写 i) 表示头文件的路径
-L 表示库文件的路径
-l(小写 L) 表示库文件名
【Linux】软硬链接 / 动静态库,Linux 的学习,linux

也可以直接将创建的头文件和库文件安装至系统目录中, 但并不推荐, 会污染系统的库目录.

2.1 动态库制作

动态库的制作和静态库类似, 不过动态库编译的源文件需要使用 -fPIC 选项, 表示产生位置无关码.
【Linux】软硬链接 / 动静态库,Linux 的学习,linux
动态库打包依旧使用 gcc/g++, 使用 -shared 选项即可(表示生成共享库格式).
【Linux】软硬链接 / 动静态库,Linux 的学习,linux

2.2 动态库使用

但由于动态库是运行时动态链接动态库的, 运行时会找不到动态库; 而静态库是编译时将静态库拷贝至可执行程序中的, 所以运行时不依赖文件.
【Linux】软硬链接 / 动静态库,Linux 的学习,linux
解决方法:

  • 拷贝动态库的软链接或动态库本身 至 /lib64/ 目录下;
  • 设置环境变量 LD_LIBRARY_PATH, 可以将第三方动态库路径添加至此环境变量中(临时方案);
//										动态库路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/hhhhhan/Program/test1

【Linux】软硬链接 / 动静态库,Linux 的学习,linux

  • 设置配置文件, 在 /etc/ld.so.conf.d/ 目录中的都是动态库配置文件, 可以在该目录创建配置文件 xx.conf (文件中存储动态库的路径), 使用 ldconfig 指令加载配置文件.
echo /home/hhhhhan/Program/test1/ > Test.conf
sudo mv Test.conf /etc/ld.so.conf.d/
sudo ldconfig

3. 动态链接原理

在可执行程序编译完成后, 可执行程序内库函数的地址并不是真正的地址, 而是库函数在动态库中的偏移量(相对地址), 是通过位置无关码 fPIC 生成的.

当可执行程序开始运行时, 若动态库没有在内存中, 操作系统会先将动态库加载至内存中; 然后通过页表建立映射关系, 将动态库加载至共享区中, 获得的动态库起始地址;

当可执行程序调用库函数时, 可执行程序会通过 动态库起始地址 + 偏移量 调用库函数.
【Linux】软硬链接 / 动静态库,Linux 的学习,linux

动态链接解决了静态库空间浪费的问题, 可执行程序只需要保存库函数的偏移量, 在运行时通过动态库加载至共享区中的虚拟地址和页表的映射, 就可以调用库函数;
使得内存中只需要存在一份动态库, 就可以同时被多个可执行程序使用.文章来源地址https://www.toymoban.com/news/detail-844794.html

到了这里,关于【Linux】软硬链接 / 动静态库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【看表情包学Linux】软硬链接 | 动静态库

       🤣  爆笑 教程  👉 《看表情包学Linux》👈   猛戳订阅     🔥 💭 写在前面: 上一章我们讲解了 inode,为文件系统收了尾,这几章我们充分地讲解完了文件系统的知识点,现在我们开始开始学习软硬链接了。如果没有文件系统的铺垫,想直接理解软硬链接难免有些困

    2024年02月16日
    浏览(31)
  • Linux下软硬链接和动静态库制作详解

    目录 前言 软硬链接 概念  软链接的创建 硬链接的创建 软硬链接的本质区别 理解软链接 理解硬链接 小结 动静态库 概念 动静态库的制作 静态库的制作  动态库的制作  本文涉及到inode和地址空间等相关概念,不知道的小伙伴可以先阅读以下两篇文章了解一下哦。  Linux文件

    2024年04月28日
    浏览(27)
  • Linux基础IO【软硬链接与动静态库】

    ✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 假设你下载了一款游戏,你是否会跑到游戏所在目录中双击 .exe 打开游戏?答案是不会,大多数人都会通过桌面的快捷方式直接打开文件,而这个快捷方式实际就是对 .exe 的 软链接 文

    2024年02月02日
    浏览(27)
  • 【Linux】基础IO——文件系统|软硬链接|动静态库

    基于上篇博客所写到的文件各种操作都是基于被打开文件所进行操作的,那么如果一个文件没有被打开它存在哪里呢?这个答案毫无疑问肯定是存在于磁盘上的。那么,对于一个没有打开的文件(也就是磁盘文件)我们应该如何理解呢? 这里我们所要讲的磁盘是机械硬盘、即

    2024年02月04日
    浏览(35)
  • 【linux深入剖析】深入理解软硬链接 | 动静态库的制作以及使用

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 软链接和硬链接是在Linux系统中常见的文件链接方式。 软链接(Symbolic Link): 软链接是一个指向目标文

    2024年04月13日
    浏览(33)
  • 【linux】:老师问什么是爱情,我说了句:软硬链接和动静态库

        文章目录 前言 一、软硬链接 二、动态库和静态库 总结   上一篇文章的最后我们讲解了文件的inode,那么文件名和inode有什么区别呢?区别就在于linux系统只认inode号,文件的inode属性中,并不存在文件名,而文件名其实是给用户用的。我们以前讲过linux文件目录,那么目

    2023年04月19日
    浏览(118)
  • [Linux]理解文件系统!动静态库详细制作使用!(缓冲区、inode、软硬链接、动静态库)

            hello,大家好,这里是bang___bang_,今天来谈谈的文件系统知识,包含有缓冲区、inode、软硬链接、动静态库。本篇旨在分享记录知识,如有需要,希望能有所帮助。 目录 1️⃣缓冲区 🍙缓冲区的意义 🍙常见缓冲区刷新策略 🍙缓冲区位置猜想 🍥现象猜测 🍥现象解

    2024年02月13日
    浏览(37)
  • 【探索Linux】—— 强大的命令行工具 P.13(文件系统 | 软硬链接 | 动态库和静态库)

    在计算机科学领域中,Linux 系统一直以来都是备受推崇的操作系统之一。其中,文件系统、软硬链接、动态库和静态库是 Linux 系统中非常重要的概念,在实际应用中扮演着不可或缺的角色。 在上一篇文章中,我们了解了 Linux 系统中文件描述符、重定向以及基础 IO 操作的相关

    2024年02月04日
    浏览(41)
  • 【Linux】—— 详解软硬链接

    前言: 本期,我将要给大家讲解的是有关 Linux下 软硬链接 的相关知识!!! 目录 前言 (一)理解硬链接 1.什么是硬链接 2.创建硬链接  3.硬链接的使用场景 (二)理解软链接 1.什么是软链接 2.创建软链接 3.软链接使用场景 (三)硬链接和软链接的对比 总结 文件共享可以

    2024年02月03日
    浏览(26)
  • linux(软硬链接)

    目录:            1.软连接            2.硬链接 ----------------------------------------------------------------------------------------------------------------------------- 1.软连接 linux当中有两个概念,一个是软连接,一个是硬链接,在学习完了文件系统和inode现在来理解这两个概念非常简单

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包