05-06-2021, 03:02 PM
GCC的链接时优化在支持链接器插件的系统上默认生成thin-LTO目标文件,即不产生机器码,只产生GIMPLE中间表示,目标文件格式为ELF.
最后的链接步骤使用gcc/g++,它们作为driver调用连接器,最终使用的是GCC的collect2程序,可以自动对LTO目标文件做链接时优化,和没有LTO数据的目标文件链接起来。ld.bfd和ld.gold都支持GCC的LTO,但lld不支持。
LLVM Clang的thin-LTO目标文件是字节码文件,和用clang -emit-llvm -c产生的文件类型相同,没有ELF结构。ld.bfd和ld.gold通过LLVM的LLVMgold.so插件调用LLVM的链接时优化,而lld不需要此插件。
使用-ffat-lto-objects产生fat-LTO目标文件可以让不支持同种LTO的链接器使用这种目标文件,最后链接时不使用链接时优化。
最后的链接步骤使用gcc/g++,它们作为driver调用连接器,最终使用的是GCC的collect2程序,可以自动对LTO目标文件做链接时优化,和没有LTO数据的目标文件链接起来。ld.bfd和ld.gold都支持GCC的LTO,但lld不支持。
LLVM Clang的thin-LTO目标文件是字节码文件,和用clang -emit-llvm -c产生的文件类型相同,没有ELF结构。ld.bfd和ld.gold通过LLVM的LLVMgold.so插件调用LLVM的链接时优化,而lld不需要此插件。
使用-ffat-lto-objects产生fat-LTO目标文件可以让不支持同种LTO的链接器使用这种目标文件,最后链接时不使用链接时优化。