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

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

本文关键字:链接 构建 何使用 可执行文件 静态 LTO 时间 使用 优化      更新时间:2023-10-16

在带有g++4.9的Ubuntu上,我按照它的指令构建了一个静态库(称之为libZeroMQ.a),它是在没有"-flto"(链接时间优化)的情况下构建的。

现在我正在研究一个使用 libZeroMQ.a 的项目(称之为 MyEXE),我将静态链接所有库。我希望用LTO构建MyEXE。

我有两个选择:

A) 构建 MyEXE,在编译和链接中使用 "-flto"。与之前构建的libZeroMQ.a链接。

B)破解(更改)ZeroMQ的配置/构建脚本,添加"-flto",然后重建libZeroMQ.a。然后通过与新的libZeroMQ.a链接来构建MyEXE。当然,在编译和链接MyEXE时仍然使用"-flto"。

就MyEXE的性能而言,我认为:

  1. B) 优于 A),因为它允许在链接时考虑优化更多代码(特别是 ZeroMQ 中的代码)。

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

我的理解正确吗?谢谢!

我真的很难让这个答案而不是评论,但这是一个答案:

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