什么是GCC lto包装?

时间:2013-11-06 08:24:11

标签: gcc compilation wrapper cross-compiling 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

在其他系统上不正确。

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

1 个答案:

答案 0 :(得分:15)

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

这就是Interprocedural optimization的目的:将整个可执行文件编译为单个源文件,允许使代码更加静态。

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