Linux 中动态链接库和静态链接库的区别与联系
Linux 中动态链接库和静态链接库的区别与联系
001、名称差异
静态库:.a
动态库:.so
002、核心区别:
一、基本定义(一句话版)
✅ 静态链接库(Static Library)
-
在链接阶段被完整拷贝进可执行文件
-
常见文件名:
libxxx.a
✅ 动态链接库(Shared / Dynamic Library)
-
不拷贝进程序,运行时再加载
-
多个程序可以共享同一份库
-
常见文件名:
libxxx.so
003、核心差异

。
因此静态库更稳定,但是更消耗资源;
动态库更加高效,共享,但是不稳定(动态库升级,程序无法运行)。
004、 为什么静态库的后缀是.a, 而动态库的后缀是.so;
.a 来源于归档 archive;
.so 来源于shared object(共享目标文件)
005、 静态库和动态库的存放目录(通常见下面四个目录)
/lib
/lib64
/usr/lib
/usr/lib64
006、/lib64 和 /usr/lib64 目录下的库文件有什么区别
/lib64 放的是“系统启动和最基本运行所必需的库”,
/usr/lib64 放的是“系统正常运行后,大多数程序使用的库”。
-
在早期阶段:
-
/usr可能还没挂载 -
但系统已经要运行程序了
-
👉 所以:
-
必须能在没有
/usr的情况下运行的库 -
放在
/lib64
。
007、如何使用命令确定库文件到底是静态库还是动态库
[root@PC1 lib64]# pwd /usr/lib64 [root@PC1 lib64]# file libsmime3.so ## 使用file命令 libsmime3.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=55c11ab164d965c94cd4dddfdeffaf5f02b8aeb5, stripped [root@PC1 lib64]# find *.a | head libanl.a libc_nonshared.a libdl.a libg.a libmcheck.a libpthread.a librt.a libutil.a [root@PC1 lib64]# file libanl.a libanl.a: current ar archive ## archive 静态库

。
008、 动态库.so后边的数字是什么意思

.so 后的数字不是“装饰”,而是 Linux 动态链接体系中
用来区分 ABI 兼容性的核心机制(SONAME)。
。

浙公网安备 33010602011771号