使用 LTO 静态 linked 可执行文件(link 时间优化):如何使用以前构建的库制作它

Statically linked executable with LTO (link time optimization) : how to make it with previously built libraries

在使用 g++4.9 的 Ubuntu 上,我按照它的说明构建了一个静态库(称之为 libZeroMQ.a),并且它是在没有“-flto”的情况下构建的(link 时间优化).

现在我正在开发一个使用 libZeroMQ.a 的项目(称之为 MyEXE),我将静态 link 所有库。我想用 LTO 构建 MyEXE。

我有两个选择:

A) 构建 MyEXE,在编译和 linking 中使用“-flto”。 Link 与之前构建的 libZeroMQ.a.

B) 破解(更改)ZeroMQ 的 config/build 脚本,添加“-flto”,并重建 libZeroMQ.a。然后通过 link 使用新的 libZeroMQ.a 构建 MyEXE。当然,在编译和 linking MyEXE 时仍然使用“-flto”。

关于MyEXE的性能,我认为:

  1. B) 比 A) 好,因为它允许在 link 时间考虑更多代码(具体来说,ZeroMQ 中的代码)进行优化。

  2. A) 仍然比根本不使用 LTO 好。

我的理解对吗?谢谢!

我真的很难将其作为一个答案而不是评论,但它一个答案:

是的,你的理解是正确的。