使用LTO静态链接的可执行文件(链接时间优化):如何使用以前构建的库进行制作
Statically linked executable with LTO (link time optimization) : how to make it with previously built libraries
在带有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的性能而言,我认为:
-
B) 优于 A),因为它允许在链接时考虑优化更多代码(特别是 ZeroMQ 中的代码)。
-
A) 仍然比根本不使用 LTO 要好。
我的理解正确吗?谢谢!
我真的很难让这个答案而不是评论,但这是一个答案:
是的,你的理解是正确的。
相关文章:
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 如何在构建链接列表时调整头、尾指针
- 在树莓派上用libtorch构建程序时的链接问题
- 未知的 GCC 链接器错误,但已成功构建
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 如何在 Linux 中构建共享库时使未定义引用的链接器失败
- 链接两个使用 c++ 构建的库_static
- 如何防止 CMake 在构建时(而不是在安装时)为共享库创建符号链接?
- 如何在Windows上链接动态构建的cmake文件
- 使用cmake构建google测试单元测试时出现链接器错误
- 使用 gcc 6 构建 OpenJDK8 时出现链接错误
- 如何在bazel中使用make规则链接库构建
- 使用 pybind11 构建库,链接其他共享库
- 使用 VS2017 构建 OpenSSL 后出现一些链接错误。 " OPENSSL_init_ssl referenced in function _main " ?
- 当我分离编译和链接时,代码不构建
- 尝试使用 gradle 构建指向静态库的 c++ 项目链接时找不到头文件
- Vscode C++调试使用 cl.exe 和 / 链接构建的代码.exe - 调试器不附加
- dev - c++中Boost链接/构建的问题
- 外部链接是否增加了链接/构建时间