lib64 目录对系统稳定运行有重要作用。
目录
- lib64文件
- 动态链接库
- 静态链接库
- 内核模块
lib64文件
lib64 文件夹存放主要是可被程序直接加载并使用的 64 位代码模块,包括动态库、静态库、内核模块等,这些文件对程序运行都至关重要。
在 Linux 系统中,lib64 文件夹通常用于存放 64位库文件的二进制文件。
主要有以下几类文件:
-
动态链接库文件(.so):这些是可直接被程序加载并链接的共享库,以
.so
作为文件扩展名。如 libopencv.so。 -
静态链接库文件(.a):这些是静态存档文件,用于静态链接,以
.a
作为扩展名。如libxxx.a
。 -
Linux 内核模块文件(.ko):一些可以被内核动态加载的模块,以
.ko
为扩展名。 -
程序的执行文件:一些程序的执行文件也会放在 lib64 文件夹下,比如 /usr/lib64/firefox 等。
-
配置文件、说明文件等。
-
相比 lib 文件夹,lib64 专门用于存放 64 位库文件,而 lib 中是 32 位版本的库。这在支持多重系统时很有必要。
动态链接库
动态库在Linux上一般使用.so
文件,在Windows上使用.dll
文件。编写动态库使代码可以被广泛重用,是软件复用的重要方式。动态链接使程序升级和部署更加灵活。
动态链接库(Dynamic Link Library,DLL)是一种包含可以被多个程序共享的代码和数据的库文件,它可以在程序运行时动态加载,而不是在linking时静态加载。
动态链接库的主要特征包括:
-
共享性:多个程序可以同时使用一个动态库,减少重复代码。
-
动态加载:程序在运行时才加载动态库,而不是在编译时加载。
-
版本管理:动态库可以单独升级,而程序无需重新编译。
-
依赖管理:明确定义库的依赖关系,按需加载所需库。
-
语言中立:支持多种语言调用,如C、C++、Rust等。
-
运行时链接:程序不需要包含动态库代码,只在运行时做符号解析并重定位。
-
空间节省:多个程序共享同一块内存,减少内存占用。
静态链接库
静态库可以看作编译时直接插入目标程序的代码段。它的主要优点是移植方便,缺点是占用空间大、重复代码多。
静态链接库(Static Library)是一种在程序编译链接阶段就被整合到目标程序中的库文件,和动态链接库相对。
静态库的主要特征:
-
静态加入:静态库在编译时就被整合到目标程序中,而不是运行时动态加载。
-
独立存在:静态库是一个独立的文件,可以被重用。
-
无版本管理:程序每次都会使用静态库的一个快照,不方便做版本升级。
-
重复代码:如果多个程序都链接了相同的静态库,会有重复代码。
-
可移植性:静态库可以和程序一起打包部署,无需安装库的环境。
-
语言相关:静态库通常是特定语言编译而成,如C++。
-
编译时间增长:增加了编译链接时间。
-
增加可执行程序大小:会将库代码加入到可执行文件中。
内核模块
内核模块机制是Linux内核一个非常重要的设计,可以动态扩展内核功能,开发内核驱动等,而无需频繁重新编译内核。是实现Linux内核可扩展性的关键。
内核模块文件是一种可以动态插入内核(Linux Kernel)的代码模块,通常情况下以.ko
作为扩展名。
内核模块的几个主要特征:
-
动态插入:可以在系统运行时通过insmod/modprobe命令动态插入内核并运行,无需重新启动。
-
可卸载:可以使用rmmod命令动态的从运行中的内核卸载模块。
-
扩展内核:可以无需修改内核源码就扩展内核的功能。
-
硬件支持:很多硬件驱动功能都是以内核模块实现的。
-
依赖管理:可以声明对其他内核模块或符号的依赖。
-
版本控制:内核模块可以独立内核进行更新。
-
优化重用:多个内核可以重用同一模块,优化内存占用。
-
加速开发:可以独立内核开发并打包模块,加快开发速度。