zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux - lib, lib32, lib64, libx32和libexec文件夹的区别

Linux 区别 文件夹 lib
2023-09-11 14:22:09 时间

在Linux嵌入式系统中,有时在根目录下会有lib和lib32两个文件夹,或者lib32只是一个lib文件夹的链接。所以收集了一下相关知识。

----- ----- ----- ----- 

Unix系的操作系统,遵循FHS - Filesystem Hierarchy Standard,Filesystem Hierarchy Standard

类Unix系统的发行版distros包括,Fedora、CentOS、RHEL,以及Debian和BSD版,从文件系统角度来说,它们区别并不大。

Directory - /lib

包含必要的共享库和内核模块。

目的:/lib目录包含那些启动系统所需的共享库文件,以及运行根文件系统中的命令所需要的共享库文件,比如/bin和/sbin中的二进制文件。

注意1: 如果共享库仅被/usr中的二进制文件引用(如任何X Window的二进制文件),则不能放在/lib中。只有运行/bin和/sbin中的二进制文件所需的共享库可以放在这里。

注意2:/lib文件夹的主要目的是存放特定的库,这些库是在/bin和/sbin目录里的工具所需要的库,/lib中的库可以是32位或64位。

Directory - /lib<qual>

其他格式的基本共享库,不是必须的。可能是/lib32、/lib64等目录。

目的:在支持不止一种二进制格式的系统上,需要不同的共享库,所以可能有一个或多个/lib目录的变体。这通常用于支持多种二进制格式的操作系统上,用于支持64位或32位,需要相同名称但格式不同的库。

注意:在这种情况下,/lib32和/lib64可能是库的目录,而/lib是与其中一个库的符号链接。

Directory - /usr/lib

用于存放程序和软件包需要的库文件。

目的:/usr/lib里包括object files、库和内部二进制文件,这些不是由用户或shell脚本直接执行的文件。

注1: 各种独立于架构的特定应用程序静态文件和子目录必须放在/usr/share中。

应用程序可以使用/usr/lib下的一个子目录。如果一个应用程序使用一个子目录,所有应用程序专门使用的架构相关的数据必须放在该子目录中。

注2:例如,perl5子目录用于Perl 5模块和库。

Directory - /usr/lib<qual>

其他格式的库文件,不是必须的。

目的:/usr/lib<qual>的作用与/usr/lib作用相同,只是用来存放不同的二进制格式文件。

注意:在/usr/lib和/usr/lib<qual>相同的情况下(一个是另一个的符号链接),这些文件和每个应用的子目录都存在。

总结:

如果在/bin或/sbin目录下有可执行文件所需的库,这些库应该放在/lib*目录下。

如果有使用用户的应用程序和软件包的库,它们应该放在/usr/lib/*中。如果某个库需要可执行文件,但这些可执行文件不应该被用户直接调用或被root调用,它们应该放在/usr/libexec中。

参考:

directory structure - Difference between lib, lib32, lib64, libx32, and libexec - Unix & Linux Stack Exchange