Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Linux】软硬连接与动静态库

【Linux】软硬连接与动静态库

作者头像
用户11029103
发布于 2025-03-10 00:27:42
发布于 2025-03-10 00:27:42
10000
代码可运行
举报
文章被收录于专栏:技术学习技术学习
运行总次数:0
代码可运行

01.软硬连接

我们先看一下它的用法

这个是软连接

这个是硬连接

软连接是一个独立的文件,因为有独立的inode号

硬连接不是一个独立的文件,因为它没有的独立的inode号,用的是目标文件的inode

属性中有一列为硬连接数

软链接的内容:目标文件所对应的路径字符串,类似与Windows中的快捷方式

软连接可以跨越不同的文件系统、分区和磁盘创建,非常适合用于指向不同位置的文件或目录,尤其是当需要方便快捷地访问文件时

在bin里面的a目录下有我们的可执行文件,我们就可以使用软连接快捷访问

硬连接是指向文件数据块的指针。它使得多个文件名指向同一个 inode。在 Linux 文件系统中,每个文件都有一个唯一的 inode,inode 存储了文件的元数据(如文件的权限、大小、数据块的位置等),而硬连接通过创建多个文件名来共享同一个 inode。这样,硬连接是多个文件名指向同一数据块的一种机制

  • 共享 inode:硬连接创建后,原始文件和硬连接文件都共享同一个 inode 编号,因此它们都指向相同的数据块。
  • 相同权限:硬连接与原文件共享相同的权限、所有者和组信息。
  • 不可跨文件系统:硬连接只能在同一个文件系统内创建,不能跨越不同的分区或磁盘。
  • 删除一个硬连接不影响其他硬连接:当删除一个硬连接(即删除一个文件名)时,实际的文件数据(inode 和数据块)并没有被删除,只有当 所有硬连接 都被删除时,文件的数据才会从磁盘上彻底删除。

硬连接适用于需要多个文件名指向同一文件内容的场景。最常见的应用是 备份 或 多个文件引用相同内容 的情况。

特性

硬连接

软连接

inode 号

同一个 inode

不同的 inode

数据存储位置

指向相同的数据块

存储原文件路径(不直接存储数据)

能否跨文件系统

不能跨文件系统

可以跨文件系统

目录链接

不能指向目录(除 root 外)

可以指向目录

链接失效

不会失效,删除一个连接不影响其他链接

如果原文件被删除,软链接失效

创建命令

ln

ln -s

查看

ls -li

ls -l(显示目标路径)

定位一个文件的两种方式:找到路径,或者直接找到目标文件的inode,最终还是要通过inode number的

任何一个目录里面都有....就相当于conf目录的重命名,有两个文件指向1179677,所以硬连接数为2

..相当于上一级目录的重命名

任何一个目录,刚开始新建的时候,引用计数一定是2,目录A内部新建一个目录,会让A目录的引用计数自动+1

linux中不允许给目录建立硬连接,避免形成路径环绕

02.动静态库

我们用过很多c/c++的标准库,strerror,strstr,STL等,必须要有具体的实现,实现在库当中

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

ldd可以帮我们查看可执行程序执行时所连接的库

这个软连接对应的就是c语言的标准库

C/C++ 编程中,(Library)是指一组函数、类、对象等的集合,用于提供特定功能的代码模块。库的使用可以使得开发者避免重复实现相同的功能,提升代码的复用性。通常分为 静态库(Static Library)动态库(Dynamic Library),它们在编译和链接阶段的行为不同。

静态库(Static Library)

静态库是一个包含预编译代码的文件,在编译时与程序的源代码一起进行链接。静态库文件的扩展名通常是 .a(Linux/Unix)或 .lib(Windows)

工作原理:

  • 链接时绑定:在编译程序时,静态库的代码会被直接复制到最终的可执行文件中。换句话说,编译器会在链接过程中将静态库的代码和应用程序的代码“静态”地链接成一个最终的可执行文件
  • 不需要运行时依赖:程序执行时,不需要依赖静态库文件,因为它们已经被包含在可执行文件中。

前面我们自己封装了一个mystdio.h文件

这里拷贝到另一个目录下的代码是两个头文件和两个.o目标文件,不需要完全提供实现。

我们这里可以创建一个静态库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dyx@VM-8-13-centos Stdio]$ ll
total 24
-rw-rw-r-- 1 dyx dyx  107 Mar  5 16:38 mymath.c
-rw-rw-r-- 1 dyx dyx   63 Mar  5 16:38 mymath.h
-rw-rw-r-- 1 dyx dyx 1344 Mar  5 16:59 mymath.o
-rw-rw-r-- 1 dyx dyx 1316 Mar  5 16:36 mystdio.c
-rw-rw-r-- 1 dyx dyx  622 Mar  5 16:36 mystdio.h
-rw-rw-r-- 1 dyx dyx 2792 Mar  5 16:59 mystdio.o
[dyx@VM-8-13-centos Stdio]$ ar -rc libmyc.a *.o

使用 ar 命令将目标文件打包为静态库文件 ar是gnu归档工具,rc表示(replace and create)

所谓的库文件,本质就是.o文件打包

查看静态库中的目录列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dyx@VM-8-13-centos Stdio]$ ar -tv libmyc.a 
rw-rw-r-- 1001/1001   1344 Mar  5 16:59 2025 mymath.o
rw-rw-r-- 1001/1001   2792 Mar  5 16:59 2025 mystdio.o
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@localhost linux]# gcc main.c -L. -lmymath

-L 指定库路径 -l 指定库名 测试目标文件生成后,静态库删掉,程序照样可以运行

头文件是一个手册,提供函数的声明,告诉用户该怎么用,.o提供实现,我们只需要补上一个main函数,调用头文件提供的方法,然后和.o进行连接,就能形成可执行文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dyx@VM-8-13-centos Stdio]$ mkdir mylib
[dyx@VM-8-13-centos Stdio]$ cd mylib/
[dyx@VM-8-13-centos mylib]$ mkdir include
[dyx@VM-8-13-centos mylib]$ mkdir lib
[dyx@VM-8-13-centos mylib]$ ll
total 8
drwxrwxr-x 2 dyx dyx 4096 Mar  5 19:12 include
drwxrwxr-x 2 dyx dyx 4096 Mar  5 19:12 lib
[dyx@VM-8-13-centos mylib]$ cp ../*.h include/
[dyx@VM-8-13-centos mylib]$ cp ../*.a lib/
[dyx@VM-8-13-centos mylib]$ 

这里创建两个目录,把所有.h文件放到include目录里,把.a文件放到lib目录里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dyx@VM-8-13-centos other]$ sudo cp ../Stdio/mylib/include/*.h  /usr/include/
[dyx@VM-8-13-centos other]$ sudo cp ../Stdio/mylib/lib/*.a  /lib64/

头文件 存放在 /usr/include/ 目录中,提供给编译器引用,以便在源代码中使用库的功能。 静态库 存放在 /lib64/ 目录中,提供给链接器使用,将库的预编译代码嵌入到最终的可执行文件中

这里还是无法完成编译,是因为这里我们第三方提供的库gcc/g++不认识,这里需要-l选项

-l指定库名,但是我们标准库就只留下myc了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dyx@VM-8-13-centos other]$ sudo rm /usr/include/mystdio.h 
[sudo] password for dyx: 
[dyx@VM-8-13-centos other]$ sudo rm /usr/include/mymath.h 
[dyx@VM-8-13-centos other]$ sudo rm /lib64/libmyc.a 
[dyx@VM-8-13-centos other]$ gcc main.c -lmyc
main.c:3:20: fatal error: mystdio.h: No such file or directory
 #include"mystdio.h"
                    ^
compilation terminated.

我们卸载库后就没办法编译了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dyx@VM-8-13-centos other]$ gcc main.c -I ./mylib/include/ -L ./mylib/lib/ -lmyc
[dyx@VM-8-13-centos other]$ ll
total 20
-rwxrwxr-x 1 dyx dyx 9032 Mar  5 20:27 a.out
-rw-rw-r-- 1 dyx dyx  311 Mar  5 18:56 main.c
drwxrwxr-x 4 dyx dyx 4096 Mar  5 20:26 mylib
[dyx@VM-8-13-centos other]$ ./a.out 
a+b=30

如果不想把库安装到系统里,就需要向上面这种方法进行使用

动态库(Dynamic Library)

动态库是一个在程序运行时加载的库文件,通常有 .so(Linux/Unix)或 .dll(Windows)扩展名。与静态库不同,动态库的代码不会在编译时直接复制到可执行文件中,而是由操作系统在程序运行时动态加载。

工作原理:

  • 运行时加载:动态库的代码在程序运行时加载,并且在程序执行期间被共享。不同程序可以共享同一个动态库实例,因此它们不会重复加载相同的库代码。
  • 动态链接:程序编译时会记录动态库的路径及库文件名称,程序运行时由操作系统通过动态链接器(如 Linux 上的 ld.so)加载动态库。
  • 创建动态库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dyx@VM-8-13-centos Stdio]$ gcc -fPIC -c mymath.c mystdio.c
[dyx@VM-8-13-centos Stdio]$ ll
total 40
-rw-rw-r-- 1 dyx dyx 4404 Mar  5 19:05 libmyc.a
-rw-rw-r-- 1 dyx dyx  311 Mar  5 19:00 main.c
drwxrwxr-x 4 dyx dyx 4096 Mar  5 19:12 mylib
-rw-rw-r-- 1 dyx dyx  107 Mar  5 16:38 mymath.c
-rw-rw-r-- 1 dyx dyx   63 Mar  5 16:38 mymath.h
-rw-rw-r-- 1 dyx dyx 1344 Mar  6 09:10 mymath.o
-rw-rw-r-- 1 dyx dyx 1316 Mar  5 16:36 mystdio.c
-rw-rw-r-- 1 dyx dyx  622 Mar  5 16:36 mystdio.h
-rw-rw-r-- 1 dyx dyx 2848 Mar  6 09:10 mystdio.o
[dyx@VM-8-13-centos Stdio]$ gcc -shared -o libmyc.so *.o
[dyx@VM-8-13-centos Stdio]$ ll
total 52
-rw-rw-r-- 1 dyx dyx 4404 Mar  5 19:05 libmyc.a
-rwxrwxr-x 1 dyx dyx 8544 Mar  6 09:11 libmyc.so

-fPIC 参数生成位置无关的代码,-shared 参数指定生成共享库。

这里链接跟上面一样,指定执行第三方库的名称,但是需要去掉前缀和后缀,那么这里动静态库名相同,这里使用了动态库

程序运行时找不到动态库,这里选择路径只是让编译器知道头文件和库的位置,操作系统不知道,程序运行的时候,要找到动态库并加载运行!

静态库没有这个问题,是因为编译期间,已经将库中的代码拷贝到我们的可执行程序内部了,后续加载和库就没有关系了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH   # 在当前目录下查找库

这种导入环境变量,但是环境变量是内存极的,可以修改.bashrc配置文件,让环境变量永久生效

这样每一次重新登录时库都会被找到,除非库非常重要,要不然没有必要这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dyx@VM-8-13-centos ~]$ ls /etc/ld.so.conf.d/
bind-export-x86_64.conf  dyninst-x86_64.conf  kernel-3.10.0-1160.108.1.el7.x86_64.conf  mariadb-x86_64.conf

还可以新增动态库搜索的配置文件,ldconfig

在新文件中加入库的路径即可 执行ldconfig让其生效

gcc 在不使用static选项的时候,默认使用动态库,如果你没有使用static,并且只提供.a,那只能静态连接当前的.a库,其他的库正常动态连接

-static必须强制的将我们的程序静态连接,这就要求我们连接的任何库都必须提供对应的静态库版本


** 静态库与动态库的对比**

特性

静态库(Static Library)

动态库(Dynamic Library)

文件扩展名

.a(Linux/Unix)或 .lib(Windows)

.so(Linux/Unix)或 .dll(Windows)

链接方式

编译时链接到可执行文件

运行时动态加载,程序运行时链接

生成的可执行文件大小

较大,因为库代码被复制到可执行文件中

较小,因为库代码不包含在可执行文件中

内存使用

每个程序都需要加载一份库的副本

不同程序可以共享同一个库的内存实例

更新库时

需要重新编译程序

只需更新动态库文件,无需重新编译程序

运行时依赖

不依赖外部库文件

需要依赖外部的动态库文件

兼容性

只要库接口不变,兼容性较好

可能存在库版本兼容性问题(例如,库的符号变化)


03.动态库加载

动态库的加载和可执行程序以及地址空间的关系是操作系统内存管理和程序执行的一个重要部分

当一个程序启动时,操作系统会为该程序分配一个 地址空间,即程序运行时使用的内存区域。这个地址空间通常包括几个主要部分:

  • 代码段(Text Segment):存放程序的机器代码。
  • 数据段(Data Segment):存放全局变量、静态变量等程序数据。
  • 堆(Heap):用于动态分配内存。
  • 栈(Stack):用于存储局部变量、函数调用等。
  • 共享库段(Shared Library Segment):存放程序依赖的共享库。

程序在运行时,共享库段 是动态加载的。这个段是由操作系统的 动态链接器 来管理和加载的。

库加载到内存中也要通过页表映射到共享区,这个动态库不是只给一个进程使用,如果有另一个进程也需要使用这个库文件,就不需要再将库加载到内存中了,所以动态库也叫做共享库

动态库的加载流程

  1. 程序启动
    • 当程序启动时,操作系统首先加载可执行文件,并为其分配地址空间。
    • 如果程序依赖于 动态库(如 .so 文件),操作系统会在运行时通过动态链接器(通常是 ld-linux.so)来加载这些共享库。
  2. 加载器(Dynamic Linker)工作
    • 动态链接器负责将 动态库符号(函数名、变量等)解析到程序的地址空间中。
    • 动态链接器会检查可执行文件中记录的 库的路径(通常通过 ELF 格式中的动态段 DT_NEEDED 来查找),并加载需要的共享库。
    • 如果库是共享库(如 .so 文件),操作系统会将它加载到程序的地址空间中。如果这些库已经被加载到内存中(例如,其他程序也在使用相同的库),操作系统会共享 这些库的内存空间,从而节省内存。
  3. 重定位(Relocation)
    • 在加载库时,动态链接器会 重定位 这些库的符号地址。由于库的加载地址可能并不是固定的,程序在编译时无法确定这些符号的实际地址,动态链接器会在程序运行时解析符号并将它们绑定到合适的内存地址。
    • 这个过程可能涉及 符号表重定位表,这些表包含了程序中所有外部符号(如函数和变量),它们需要在程序执行时解析。
  4. 共享库的映射
    • 操作系统通过 内存映射mmap)将动态库加载到程序的地址空间中。在加载时,共享库 可以被 映射到相同的内存地址,从而 多个进程共享 同一份库代码,避免重复加载,节省内存。
  5. 执行程序
    • 一旦所有的库加载完毕,程序可以开始执行,所有对库函数的调用都会通过已经解析的符号地址来执行。

我们的可执行程序,编译成功,没有加载到内存,没有加载运行,二进制代码有“地址”吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[dyx@VM-8-13-centos code]$ cat code.c 
#include<stdio.h>


int Sum(int top)
{
    int i=1;
    int ret=0;
    for(;i<=top;i++)
    {
        ret+=i;
    }
    return ret;
}
int main()
{
    int top=100;

    int result = Sum(top);

    printf("result: %d\n",result);
    return 0;
}
[dyx@VM-8-13-centos code]$ gcc code.c 
[dyx@VM-8-13-centos code]$ ll
total 16
-rwxrwxr-x 1 dyx dyx 8384 Mar  7 12:40 a.out
-rw-rw-r-- 1 dyx dyx  244 Mar  7 12:40 code.c
[dyx@VM-8-13-centos code]$ 

将其结果反汇编到code.s中

发现它是有地址的,ELF 是一种标准化的文件格式,它定义了如何存储程序的代码、数据、符号信息和调试信息等内容。它使得程序可以被有效地加载到内存中执行

ELF格式的可执行程序,二进制是有自己的固定格式的,elf可执行程序的头部,有可执行程序的属性, 可执行程序编译之后,会变成很多汇编语句,每条汇编语句都有它的地址

如何编址的呢?这里是从00000000000 ~ FFFF…FFFFFF 平坦模式,所有的内存地址都属于同一个连续的地址空间,并且 没有明显的分段。程序的所有数据和代码都可以直接访问这块地址空间中的任意位置

ELF+加载器可以让我们找到这个文件各个区域的起始和结束地址,还有main函数的入口地址

先创建PCB,再加载到内存中

mm_struct结构体对象,有code_start,code_end,等的成员变量,初始值从可执行程序来

这里通过可执行程序的头部区地址填充结构体的变量

进程创建阶段,初始化地址空间,让cpu知道main函数入口地址,代码加载到内存中,每一行代码和数据就有了物理地址,自己的虚拟地址自己也知道,就可以构建映射了

库只要加载到内存,就有了物理地址了,要用它,就得把它映射到地址空间

操作系统需要在当前地址空间堆栈之间申请一段虚拟地址,这两段地址填充到页表中完成映射

库函数的调用,其实是在地址空间内来回跳转

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux:基础IO(三.软硬链接、动态库和静态库、动精态库的制作和加载)
上次介绍了基础IO(二):Linux:基础IO(二.缓冲区、模拟一下缓冲区、详细讲解文件系统)
是Nero哦
2024/07/01
2890
Linux:基础IO(三.软硬链接、动态库和静态库、动精态库的制作和加载)
深入浅出动静态库
  当你在Linux系统上编写和运行程序时,动态库和静态库是两个非常重要的概念。它们不仅影响着程序的编译和执行效率,还直接关系到程序的可移植性和灵活性
用户11029129
2024/06/04
1510
深入浅出动静态库
【Linux】从零开始认识动静态库 - 静态库
今天我们来学习动静态库。我们之前有没有使用过库呢??? 当然了: strerror strstr strcpy memset...等函数都要有具体的实现,那这个具体的实现在哪里呢???就是在我们的库中!
叫我龙翔
2024/05/11
1980
【Linux】从零开始认识动静态库 - 静态库
【Linux修炼】14.磁盘结构/文件系统/软硬链接/动静态库
在之前文件的学习中,一开始我们就提到了文件操作的本质是进程和被打开文件之间的关系,那没有没打开的文件呢?如果一个文件没有被打开,该如何被OS管理呢?
每天都要进步呀
2023/03/28
1.1K0
【Linux修炼】14.磁盘结构/文件系统/软硬链接/动静态库
【Linux系统IO】六、动静态库
​ 我们之前学 gcc 的时候也有接触过一点动静态库的知识,现在要把它单独拿出来讲,主要是因为我们后面肯定在自己开发的时候需要包装自己的库,此时就需要有动静态库的原理知识和使用知识!
利刃大大
2025/03/11
940
【Linux系统IO】六、动静态库
Linux软硬链接与动静态库
我们看到, 真正找到磁盘上文件的并不是文件名, 而是inode, 其实在linux中可以让多个文件名对应于同一个inode.
用户11317877
2025/02/19
1220
Linux软硬链接与动静态库
【Linux】软硬链接和动静态库
  在Linux系统中,文件链接分为两种类型:硬链接(Hard Link)和软链接(也称为符号链接或Symbolic Link)。它们都是用于创建文件的额外入口点,但是工作原理和使用场景有所不同。
大耳朵土土垚
2024/11/10
2070
【Linux】软硬链接和动静态库
动态库与静态库
静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库。
二肥是只大懒蓝猫
2023/03/30
2.4K0
动态库与静态库
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
 库其实就是所有的.o文件用特定的方式进行打包形成一个文件,各个.o文件包含了源代码中的机器语言指令。
用户10923276
2024/04/09
7030
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
【Linux】————动静态库
现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。共享库的好处是,不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。
用户11036582
2024/10/23
1440
【Linux】————动静态库
linux 动态库 静态库_静态库里面包含动态库
那么这三个时间有什么作用呢? 我们在使用自动化构建工具Makefile时,如果连续make会发现:
全栈程序员站长
2022/11/10
7.5K0
linux 动态库 静态库_静态库里面包含动态库
动静态库:选择与应用的全方位指南
那么这样inode中一定有一个引用计数的变量用于记录这个inode编号有多少段映射关系。
绝活蛋炒饭
2024/12/16
890
动静态库:选择与应用的全方位指南
【Linux】软硬链接和动静态库
所以我们说Linux下一切皆文件,那么目录是文件吗?是的,因为它也有自己的inode,我们可以通过ls -i的命令来查看我们目录对应的inode
s-little-monster
2025/02/21
1150
【Linux】软硬链接和动静态库
【Linux】掌握库的艺术:我的动静态库封装之旅
在计算机编程中,库(Library)是一个预先编写的代码集合,包含了可以被其他程序调用的函数、类、变量和资源。库的主要目的是为了简化编程过程,提供常用功能的实现,促进代码重用,从而减少开发时间和提高软件的可靠性。
Yui_
2024/11/19
1010
【Linux】掌握库的艺术:我的动静态库封装之旅
【Linux篇】革新编程方式:如何开发让人眼前一亮的库
库(Library)是指一组已封装、可复用的代码集合,通常以函数、类或模块的形式提供。它将常见或复杂的功能抽象出来,供开发者直接调用,而无需重复实现。根据链接方式,可分为静态库(在编译时合并到可执行文件)和动态库(在运行时加载);根据用途,又可细分为通用工具库、领域专用库等。通过引入库,项目能够保持结构清晰、降低耦合、加快开发速度,同时也便于维护和升级。
熬夜学编程的小王
2025/04/15
680
【Linux基础IO】Linux IO编程入门:揭秘动态库与静态库的秘密
前言:在Linux的浩瀚编程海洋中,IO(输入/输出)操作作为系统与外界交互的基石,其重要性不言而喻。无论是文件读写、网络通信还是设备驱动,都离不开IO操作的支撑。而在这个过程中,动静态库作为代码复用和模块化的重要手段,扮演着至关重要的角色。它们不仅简化了开发流程,提高了开发效率,还通过优化资源使用和减少编译时间等方式,为Linux程序的性能和可维护性保驾护航
Eternity._
2024/10/01
1320
【Linux基础IO】Linux IO编程入门:揭秘动态库与静态库的秘密
【Linux】动态库与静态库的底层比较
我们前两篇文章讲解了如何建立动静态库与如何使用动静态库。 接下来我们就来深入聊聊动静态库。
叫我龙翔
2024/05/13
2980
【Linux】动态库与静态库的底层比较
【Linux】动静态库(超详细)
💢 由于CentOS 8系统2021年12月31日已停止维护服务,CentOS 7系统将于2024年06月30日停止维护服务。CentOS官方不再提供CentOS 9及后续版本,不再支持新的软件和补丁更新。CentOS用户现有业务随时面临宕机和安全风险,并无法确保及时恢复。
IsLand1314
2024/11/19
1020
【Linux】动静态库(超详细)
【Linux】软硬链接与动静态库
 我们发现,每一个不同文件的inode编号都不相同,所以inode可以说是用来标识文件的标识符。接下来,我们通过下面指令来给mysoft文件,创建软链接:
诺诺的包包
2023/10/15
2620
【Linux】软硬链接与动静态库
详解动态库和静态库
在C、C++中我们使用过标准库,比如在使用strerror、vector、string等时,都只是调用了这些函数接口,这些都是需要具体的实现。
南桥
2024/06/03
2510
详解动态库和静态库
相关推荐
Linux:基础IO(三.软硬链接、动态库和静态库、动精态库的制作和加载)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验