我正在使用buildroot为嵌入式系统准备图像。我想导出buildroot内部交叉编译器,这样其他人就可以使用相同的版本,在命令检查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包装器是用来做什么的吗?什么时候需要?
发布于 2013-12-08 09:46:18
当你编译一个可执行文件时,gcc将只为当前文件优化和合并相同的常量。通常情况下,由于ld链接了.o文件,所以无法分析整个程序。
这就是Interprocedural optimization的目的:编译整个可执行文件,就像它是一个源文件一样,允许使代码更加静态。
这有一个问题,LD不能真正识别导出的GIMPLES。
为此,我将使用lto插件(liblto_plugin.so.0.0.0),它直接调用make或lto-wrapper,后者调用lto1,其中每次启动lto1都负责生成一个‘’(参见-flto-选项和gcc文档中的lto-partitions参数)。
https://stackoverflow.com/questions/19807107
复制相似问题