提问人:Martian2020 提问时间:10/16/2023 最后编辑:Martian2020 更新时间:10/20/2023 访问量:73
为什么 gcc 12 占用的磁盘空间是 Linux 发行版中 11 的 6 倍?
Why gcc 12 takes 6 times larger disk space than 11 in a linux distro?
问:
我最近尝试从 Linux Mint 21 迁移到 21.2。我已经下载了发行版并注意到 ISO 文件的 3Gb 与 2.4 Gb 大小。从比较来看,主要的单一差异是包括 。11 需要 66Mb, 12 - 411 Mb !(未压缩)。GCC 12
GCC 11
网络搜索无助于找到答案。是什么让 GCC 12 如此之大?短暂性投资安全
P.S. 奖金问题,如果我只是从发行版中删除 GCC 12 以节省空间会发生什么?(好吧,不仅仅是删除,还要用 12 中的可执行文件链接替换 11 的链接)
文件夹 ( | ) 的差异主要取决于两个文件的大小:可执行文件 200 与 26 Mb、194 与 24 Mb。/usr/lib/gcc/x86_64-linux-gnu/12/
11
cc1
lto1
当软件“突然”变得臃肿 6 次时,我开始怀疑......
附言2.同时,由于没有答案,我想与 Ubuntu 进行比较,怀疑 Linux Mint 构建者忽略了一些优化。但目前最新的 Ubuntu 发行版存在一些问题(与问题无关)。
答:
各种因素在二进制文件的大小中起作用,主要是使用哪些选项来构建编译器。
通过比较任一编译器版本的输出,您可能会获得一些额外的线索,这些版本告诉 GCC 的配置选项。-v
如果编译器是从尚未发布的源代码修订版生成的,则会启用额外的内部检查,这会增加代码大小和执行时间。在这种情况下,您可以添加到配置选项中。
--enable-checking=release
生成编译器时使用的优化级别。如果编译器是出于某种原因(调试等)构建的,则代码大小和执行时间将会增加。对于发布,您希望在 like 上进行优化并启用 LTO 的情况下构建编译器。
-O0
-O2
如果编译器是使用调试信息构建的,则可能会大大增加二进制大小,尤其是对于包含所有宏定义的 DWARF-3。大多数人不需要编译器中的调试信息,因此您可以尝试
剥离
可执行文件。安装后,您可以代替安装脚本为您运行。make install-strip
make install
strip
用于构建的编译器也起着作用(在非 boostrap 模式下,例如 with )。
gcc
--disable-bootstrap
我的猜测是第 3 点,所以在删除可执行文件之前,您可以尝试一下。strip
评论