Clang、GCC 和 LTO 之间的互操作性

Vin*_*nci 5 c++ gcc interop clang lto

我知道 Clang 和 GCC 或多或少是兼容的 C/C++ 编译器,只要处理好架构标志、预定义和链接正确的库之类的事情。使用一个编译器创建库并将它们与另一个编译器创建的对象链接实际上非常简单(至少在 x86 上)。

这是一个小测试项目,正是这样做的: https://gitlab.com/higaski/Interoperability

但是我想知道链接时间优化(LTO)是否可以跨编译器工作?我知道 LTO 需要某种形式的中间表示,例如 LLVM 位码或 GCC GIMPLE,但也许有一个工作流程可以同时利用它们?

yug*_*ugr 2

不,LTO 不能在编译器之间共享,正是因为它实际上是编译器内部表示的转储。即使在同一编译器的不同版本之间,这种表示形式也是不稳定的。