llvm+clang 添加 LTO(Link Time Optimization) 支持
llvm+clang 添加 LTO(Link Time Optimization) 支持
binutils
LTO 要求当前系统binutils
可使用 gold linker
或者ld.bfd
通过 plugin
支持 LTO, binutils
版本 >= 2.21.511.0.2
. 可通过ld -plugin
检查当前系统是否支持 plugin
.
RHEL/CentOS6
系统自带 binutils
不支持 plugin
.
$ ld -v
GNU ld version 2.20.51.0.2-5.47.el6_9.1 20100205
$ ld -plugin
ld: unrecognized option '-plugin'
ld: use the --help option for usage information
安装 devtoolset-7
后可以支持.
$ ld -v
GNU ld version 2.28-8.el6
$ ld -plugin
ld: -plugin: missing argument
ld: use the --help option for usage information
亦可通过重新编译binutils
安装到系统提供支持
$ git clone --depth 1 git://sourceware.org/git/binutils-gdb.git binutils
$ mkdir build
$ cd build
$ ../binutils/configure --disable-werror # ld.bfd includes plugin support by default
$ make all-ld
LLVM-CLANG
Full compile llvm-clang
重新配置 llvm-clang
运行 cmake
添加 -DLLVM_BINUTILS_INCDIR=/path/to/binutils/include
指定包含 plugin-api.h
目录参数 , make install/strip
即可.
LLVMgold plugin
安装 binutils
到 $PREFIX
目录.
cmake ... -DLLVM_BINUTILS_INCDIR=/path/to/binutils/include ../llvm_Release_500/
make -C tools/gold/
复制 /lib/LLVMgold.so
到 $PREFIX/lib/bfd-plugins/
Usage
clang -flto xxx.c -o xxx
autotool 工具链配置使用.
export CC="$PREFIX/bin/clang -flto"
export CXX="$PREFIX/bin/clang++ -flto"
export AR="$PREFIX/bin/ar"
export NM="$PREFIX/bin/nm"
export RANLIB=/bin/true #ranlib is not needed, and doesn't support .bc files in .a
参考
gold linker
GCC LTO
libLTO
GoldPlugin
llvm+clang 添加 LTO(Link Time Optimization) 支持相关推荐
- LTO(Link Time Optimization)优化
之前做build settings相关的调研,一直以为开启LTO后主要是能给包大小带来优化(在debug模式下包大小确实减小了5.7M),但是最终打包(release下)发现包大小不减反增了0.2M, ...
- 【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍
转自:ARM 之七 主流编译器(armcc.iar.gcc for arm.LLVM(clang))详细介绍_itexp-CSDN博客_armcc 必备 在讲解各编译器之前,必须先了解一下以下文件 ...
- clang编译c语言开o优化,针对gcc或clang的LTO可以跨C和C方法进行优化
是! 链接时优化通常适用于"胖"目标文件中存在的中间表示(IR),其可以包含用于传统链接的机器代码和用于LTO链接的IR. 在这个阶段,没有更高级的语言结构,因此链接时优化与语言无 ...
- LLVM Clang前端编译与调试
LLVM Clang前端编译与调试 iOS 关于编译 o 一.Objective-C 编译过程 o 为什么需要重新编译? o 编译步骤 o 二.编译步骤的详细说明 o 1.预处理 o 2.编译 o 词 ...
- 在windows下使用llvm+clang
clang是FreeBSD和Mac下C/C++语言的默认编译器.如果你在苹果下做过开发,那么应该对它很熟悉. 这套工具链有很多优点: 代码很新,架构优良. 错误信息更友好. 静态检查功能更强大. 版权 ...
- 编译器 LLVM Clang原理与实战 制作自己的编译器 source-to-source 源代码转换 编译遍 compile pass 代码插桩
编译器 LLVM Clang原理与实战 参考1 clang LLVM CMU 教案 深入剖析-iOS-编译-Clang-LLVM LLVM_proj LLVM编程索引 llvm源码浏览带跳转 llvm ...
- iOS 查漏补缺 - LLVM Clang
LLVM 是一个自由软件项目,它是一种编译器基础设施,以 C++ 写成,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端.它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期 ...
- 编译器 llvm clang 源码转换示例
编译器 llvm clang 源码转换示例 从git获取llvm项目的源码方式: git clone https://github.com/llvm/llvm-project.git 下载源码后,进入 ...
- 扩展LLVM:添加指令、内部函数、类型等
扩展LLVM:添加指令.内部函数.类型等 Introduction and Warning Adding a new intrinsic function Adding a new instructi ...
- 在Linux上编译LLVM/Clang 8.0.0等全部源代码
2019独角兽企业重金招聘Python工程师标准>>> 本教程使用的操作系统是Ubuntu Linux 18.04.2 LTS版本,编译器是GCC 6.5.0(不用新版的原因是某些代 ...
最新文章
- redis实现对账(集合比较)功能
- 2、创建视图(CREATE VIEW)
- OGRE 1.7.2 [Cthugha] 编译配置全过程方法
- 分析IBASE save 白屏问题
- ASP.NET 2.0 的数据源、数据绑定控件概述与区别
- 【完整版-斯坦福-密码学】全13讲(流密码)【笔记】
- Python之网络爬虫(XML与HTML与JSON文件、urllib与request的用法)
- 6.5版本虚拟机的封装
- 今天又啃了一些數據類型的東西~漸漸地記起了一些東西。
- vs2013 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”。是否缺少程序集引用?...
- android 自定义ratingbar 图片显示不全的解决方案
- 每次连接服务器都要source ~/.bashrc问题
- 阿里云产品经理吴华剑:SLS 的产品功能与发展历程
- JVM初识-JVM内存结构
- 服务器u盘pe制作,u盘winpe启动盘制作
- 超市仓库商品盘点作业流程,仓库如何进行盘点,仓库盘点流程?仓库盘点好方法?
- 照片换背景色(Photoshop工具)
- SAP中采购合同与采购计划协议关联性分析(续)
- uniapp 微信小程序分享给微信好友与分享到朋友圈功能
- 钛磨产品行业调研报告 - 市场现状分析与发展前景预测
热门文章
- 观察者模式Java内存管理进阶篇——如何避免内存泄漏
- android进阶(一)Activity加载模式
- BZOJ5222[Lydsy2017省队十连测] 怪题
- BZOJ2832[AHOI2012] 信号塔
- chrom浏览器配置,把跨域保护关闭
- linux重定向文件容加时间,linux – Shell重定向和文件I / O持续时间
- java中的冒泡排序和交换排序
- java构造器_Java入门第十三课:“如何使用构造器初始化对象?”
- php 5的手册,本手册中所涉及的 PHP 版本 - PHP 5 中文文档
- java -cp 配置文件目录_java – 使用可执行JAR时指定Log4j2配置文件