为什么gcc 12在Linux发行版中占用的磁盘空间是11的6倍?

pgvzfuti  于 8个月前  发布在  Linux
关注(0)|答案(1)|浏览(87)

我最近试图从Linux Mint 21移动到21.2。我已经下载了发行版,并注意到ISO文件的3Gb与2.4 Gb大小。从比较主要的单一差异是包含GCC 12沿着GCC 11。11需要66 Mb,12 - 411 Mb!(未压缩)。
网络搜索并没有帮助找到答案。是什么让海湾合作委员会12如此之大?
P.S.额外的问题是,如果我只是从发行版中删除GCC 12以节省保存空间,会发生什么?(嗯,不仅仅是删除,还将指向12的链接替换为指向11的可执行文件的链接)
100(/usr/lib/gcc/x86_64-linux-gnu/12/)|11)主要是由于两个文件的大小不同:cc1可执行文件200对26 Mb,lto1 194对24 Mb。
当软件“突然”膨胀6倍时,我会怀疑......
P.S.2.在没有答案的同时,我想与Ubuntu进行比较,怀疑Linux Mint构建者忽略了一些优化。但目前最新的Ubuntu发行版有一些问题(与问题无关)。

8mmmxcuj

8mmmxcuj1#

各种因素对二进制文件的大小起着作用,主要是编译器构建时使用的选项。
通过比较两个编译器版本的-v输出,您可能会得到一些额外的线索,这些输出告诉GCC的配置选项。

  • 如果编译器是从尚未发布的源版本构建的,则会启用额外的内部检查,这会增加代码大小和执行时间。在这种情况下,您可以将--enable-checking=release添加到配置选项中。
  • 构建编译器时使用的优化级别。如果编译器由于某种原因(调试等)使用-O0构建,代码大小和执行时间将增加。对于发布,您希望构建像-O2这样的优化编译器并启用LTO。
  • 如果编译器是用调试信息构建的,这可能会增加很多二进制文件的大小,特别是DWARF-3,它包括所有的宏定义。大多数人在编译器中不需要调试信息,所以你可以尝试strip可执行文件。在安装时,你可以make install-strip而不是make install,这样安装脚本将为你运行strip
  • 用于构建gcc的编译器也发挥了作用(在非引导模式下,例如--disable-bootstrap)。

我猜是第三个,所以在删除可执行文件之前,你可以在它们上尝试strip

相关问题