gpt4 book ai didi

gcc - 如何将 GCC LTO 与不同优化的目标文件一起使用?

转载 作者:行者123 更新时间:2023-12-04 03:10:33 29 4
gpt4 key购买 nike

我正在使用 arm-none-eabi-gcc 为基于 Cortex-M4 的微 Controller 编译一个可执行文件。非性能关键代码使用 -Os(针对可执行代码大小进行了优化)编译,性能关键部分使用另一个优化标志,例如。 -Og/-O2

在这样的构建中使用 -flto 安全吗?如果是这样,应该将哪个优化标志传递给链接器?

最佳答案

根据GCC documentation关于优化选项:

It is recommended that you compile all the files participating in the same link with the same options

这样的说法比较含糊。然而,当深入研究 release notes of GCC 5 时, 还有一些额外的细节:

Command-line optimization and target options are now streamed on a per-function basis and honored by the link-time optimizer. This change makes link-time optimization a more transparent replacement of per-file optimizations. It is now possible to build projects that require different optimization settings for different translation units (such as -ffast-math, -mavx, or -finline).

以及有关哪些标志受此类限制影响以及哪些不受此类限制影响的信息:

Note that this applies only to those command-line options that can be passed to optimize and target attributes. Command-line options affecting global code generation (such as -fpic), warnings (such as -Wodr), optimizations affecting the way static variables are optimized (such as -fcommon), debug output (such as -g), and --param parameters can be applied only to the whole link-time optimization unit. In these cases, it is recommended to consistently use the same options at both compile time and link time.

在您的场景中,优化标志 -Og-O2-Os 可以作为优化属性传递并且不会落入编译时和链接时标志应该相同的情况。所以是的,在这样的构建中使用 -flto 应该是安全的。

关于在链接时传递的优化标志,如发行说明中所述:

Contrary to earlier GCC releases, the optimization and target options passed on the link command line are ignored.

GCC 自动确定要使用的优化级别,这是编译目标文件时使用的最高级别。因此,您不需要将任何 -O 优化选项传递给链接器。

关于gcc - 如何将 GCC LTO 与不同优化的目标文件一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45632197/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com