包管理器如何安装与您的系统架构兼容的库?

包管理器如何安装与您的系统架构兼容的库?

例如,当我写

sudo apt-get install libjpeg-dev

它会将该libjpeg.so库安装到我的系统中。

现在,在线包存储库是否包含一堆.so针对不同系统架构的不同文件,而包管理器只下载正确的文件?或者包管理器是否在您的系统上编译库并安装编译后的.so文件?还是还有其他我没有考虑到的场景?

答案1

在大多数情况下,包存储库包含针对不同体系结构的不同包,并且包管理器下载适当的包。有些包在所有体系结构上都是相同的,并且无论本地系统的体系结构如何,包管理器都将下载相同的包。

因此amd64apt install libjpeg-dev将下载一个包对于all建筑,它本身取决于一个包对于amd64建筑

On dpkg/ aptbased系统,默认的架构是包的架构dpkg。您可以将此类系统配置为使用其他体系结构,然后在要安装相应的包时需要指定适当的非默认体系结构(如果它符合多体系结构):

sudo apt install libjpeg62-turbo:armhf

基于源代码而不是基于二进制的发行版(例如 Gentoo)将下载源代码并为您的系统构建库。

答案2

现代发行版附带 dpkg,配置了开箱即用的正确架构。

如果您安装了amd64的发行版,您还可以添加架构i386来安装32位的执行环境,以防您必须使用一些尚未为amd64架构提供的软件的二进制发行版。

现在,在线包存储库是否包含一堆.so针对不同系统架构的不同文件,而包管理器只下载正确的文件?或者包管理器是否在您的系统上编译库并安装编译后的.so文件?还是还有其他我没有考虑到的场景?

取决于发行版。许多流行的发行版会下载共享对象,而不是构建它;例如使用 APT 或 YUM 的发行版。但同样,取决于发行版。

答案3

基于 RPM 的发行版包含针对不同架构的软件包(例如,x86针对x86_64intel 32 和 64 位),也有noarch一些软件包不包含二进制文件(文档、脚本等)。默认情况下,仅安装与计算机体系结构匹配的软件包(并支持 noarch 软件包),您可以明确询问其他体系结构(例如交叉编译)。之后安装的软件包会正常升级。

相关内容