什么是GCC lto包装?

Mih*_*lko 14 gcc compilation cross-compiling wrapper lto

我正在使用buildroot为嵌入式系统准备图像.我想导出buildroots内部交叉编译器,以便其他人可以使用相同的版本,命令检查GCC版本后:arm-linux-gcc -v我看到配置COLLECT_LTO_WRAPPER为我的硬盘上的静态位置

 COLLECT_LTO_WRAPPER=/home/user/arm/buildroot/output/host/usr/libexec/gcc/arm-unknown-linux-uclibcgnueabi/4.7.1/lto-wrapper
Run Code Online (Sandbox Code Playgroud)

它在另一个系统上是不正确的.

我只能发现LTO意味着链路时间优化.你能解释一下lto包装用什么时候需要什么?

use*_*570 15

编译可执行文件时,gcc将仅为当前文件优化和合并相同的常量.通常,由于.o文件与ld链接,因此无法分析整个程序.

这是过程间优化的目的:将整个可执行文件编译为单个源文件,允许使代码更加静态.

这是一个问题,LD无法真正识别导出的GIMPLES.
为此,ld使用调用make的lto插件(liblto_plugin.so.0.0.0)或lto-wrapper调用lto1 的直接调用lto1,其中每个lto1 lauch负责生成'partition'(参见-flto-partition选项和gcc文档中的lto-partitions参数).