Clang:如何检查是否执行了 LTO

Clang: How to check if LTO was performed

对于 gcc,此 answer 告诉我们如何验证是否执行了 Link-时间优化。对于 clang,我看不到任何类似于 .gnu.lto.

的条目

更具体地说,我有一个二进制文件,我很确定 LTO 应该有很大的好处,但我什么也没看到。我想知道 cmake 是否真的做了正确的事情。

有什么方法可以通过查看二进制文件或 *.o 文件来判断 clang 是否执行了 LTO?

一个选项是尝试 运行 llvm-dis 您的一个 .o 文件。如果实际执行了 LTO,.o 文件包含 llvm 位码,llvm-dis 将生成包含人类可读的 llvm ir 的 .ll 文件。否则会产生错误信息 "error: Invalid bitcode signature".

file 实用程序将报告文件为 "LLVM IR bitcode"。 LLVM/clang 的 LTO 设施不生成 "fat" 目标文件,它只是 IR。