全场景链接时二进制库内联优化
本特性支持全场景链接时的二进制内联,通过多版本二进制的组合输出,及LTO插件形式的多版本符号解析,支持不同版本编译器的LTO的内联优化;并设计跨模块的编译选项分析和匹配,适配不同编译模块的融合,实现全场景的链接时优化。
选项 -fmulti-version-lib=
说明
该选项为链接时选项,与-flto
结合使用,用于LTO链接时指示传入的库为多版本的LTO格式,需要编译器切换旧版本的LTO形式读取 (目前支持openEuler 2403 SP1、openEuler 2409 编译的LTO格式),用于兼容不同LTO的静态库或目标文件进行融合链接及优化编译。
使用方式
在选项中加入,如传入多个文件名通过逗号隔开:
bash
-flto -fmulti-version-lib=liba.a,libb.a
举例:
bash
# gcc for openEuler 24.09
gcc -O2 -fPIC -flto -c fa.c -o fa.o
gcc-ar rcs liba.a fa.o
# gcc for openEuler latest
gcc -O2 -fPIC -flto -fmulti-version-lib=liba.a main.c liba.a -o exe
选项 -finline-force=
说明
该选项为链接时选项,与-flto
结合使用,用于在LTO链接时,指示对传入的目标静态库或目标文件尝试进行内联,该选项将对目标文件中的函数尝试内联增强,增强以下内联扩展:
- 架构选项的兼容,当调用函数和被调用函数使用的march/mcpu等信息不同时,尽可能将被调用函数的架构选项与调用函数的架构选项切换一致,并进行内联编译。
inline
关键字,类似于被调用函数增加了inline
关键字,指示在编译过程中能找到函数实体,就尽可能内联。always_inline
属性,类似于被调用函数增加了__attribute__((always_inline))
属性。
使用方法
在选项中加入,如传入多个文件名通过逗号隔开:
bash
-flto -finline-force=liba.a,libb.a
注:-finline-force
,不加目标文件名形式,仅用于全局内联调试分析,不直接使用。
举例:
bash
gcc -O2 -fPIC -flto -c fa.c -o fa.o
gcc-ar rcs liba.a fa.o
gcc -O2 -fPIC -flto -finline -force=liba.a main.c liba.a -o exe
文档捉虫