例如,当我写
sudo apt-get install libjpeg-dev
它会将该libjpeg.so
库安装到我的系统中。
现在,在线包存储库是否包含一堆.so
针对不同系统架构的不同文件,而包管理器只下载正确的文件?或者包管理器是否在您的系统上编译库并安装编译后的.so
文件?还是还有其他我没有考虑到的场景?
答案1
在大多数情况下,包存储库包含针对不同体系结构的不同包,并且包管理器下载适当的包。有些包在所有体系结构上都是相同的,并且无论本地系统的体系结构如何,包管理器都将下载相同的包。
因此amd64
,apt install libjpeg-dev
将下载一个包对于all
建筑,它本身取决于一个包对于amd64
建筑。
On dpkg
/ apt
based系统,默认的架构是包的架构dpkg
。您可以将此类系统配置为使用其他体系结构,然后在要安装相应的包时需要指定适当的非默认体系结构(如果它符合多体系结构):
sudo apt install libjpeg62-turbo:armhf
基于源代码而不是基于二进制的发行版(例如 Gentoo)将下载源代码并为您的系统构建库。
答案2
现代发行版附带 dpkg,配置了开箱即用的正确架构。
如果您安装了amd64的发行版,您还可以添加架构i386来安装32位的执行环境,以防您必须使用一些尚未为amd64架构提供的软件的二进制发行版。
现在,在线包存储库是否包含一堆
.so
针对不同系统架构的不同文件,而包管理器只下载正确的文件?或者包管理器是否在您的系统上编译库并安装编译后的.so
文件?还是还有其他我没有考虑到的场景?
取决于发行版。许多流行的发行版会下载共享对象,而不是构建它;例如使用 APT 或 YUM 的发行版。但同样,取决于发行版。
答案3
基于 RPM 的发行版包含针对不同架构的软件包(例如,x86
针对x86_64
intel 32 和 64 位),也有noarch
一些软件包不包含二进制文件(文档、脚本等)。默认情况下,仅安装与计算机体系结构匹配的软件包(并支持 noarch 软件包),您可以明确询问其他体系结构(例如交叉编译)。之后安装的软件包会正常升级。