gcc LTO - 共享库 - 我是对的吗?

 北海盗羽翼800 发布于 2023-01-03 12:52

正如keltar所说,LTO不会影响共享库.但...

LTO适用于静态库

只需更换argcc-ar,并添加选项--plugin gccpath/liblto_plugin.so.这LTO插件将在复制声明,类型,调用图和GIMPLE表示从LTO- 编译对象为静态库.(同样ranlib被替换gcc-ranlib)

在你的例子中

# First retrieve the GCC path
gccpath=$(gcc -print-search-dirs | awk '/install/{print $2}')

# Compile the static library
gcc julia.c -o julia.o -flto -ffat-lto-objects
gcc-ar rcs libjulia.a julia.o --plugin $gccpath/liblto_plugin.so

# Compile & link the executable
gcc main.c libjulia.a -flto -Ofast -march=native

注:-Ofast引入GCC-4.6 [参考](否则使用-03)

更新 Makefile

GCCPATH = $(shell gcc -print-search-dirs | awk '/install/{print $$2}')
AR      = gcc-ar
RANLIB  = gcc-ranlib
ARFLAGS     += --plugin $(GCCPATH)/liblto_plugin.so
RANLIBFLAGS += --plugin $(GCCPATH)/liblto_plugin.so
CFLAGS      += -flto -ffat-lto-objects
CXXFLAGS    += -flto -ffat-lto-objects
LDFLAGS     += -flto=8    # 8 -> compiles using 8 threads

不要忘记,真正的编译将在链接时完成.因此,将优化标志从CFLAGS(和CXXFLAGS)移到LDFLAGS;-)还有一件事,调试信息和LTO在GCC-4.9中仍然是实验性的.GCC-5.0应该改善这一点......

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有