zoukankan      html  css  js  c++  java
  • 使用ccache大幅度加速gcc编译速度至少1倍以上(不需要修改任何编译选项)

    因为我们整个项目都是使用c++开发的,生成的so足有50M,原来编译一遍要三五分钟,一个针对oracle,一个针对mysql,整个轮回下来这部分就要10来分钟,加上代码上传、翻译,一轮配管打包下来二三十分钟。BOSS有些生气,效率比较低。今天一大早到公司就着手测试。经在本地vmware测试,编译gperftools的速度从2分30秒下降到1分。立刻让项目组安排调整。原来配管只有一个cpu核,经过让升级到4核,加上使用ccache,不需要修改任何编译选项,快的不行。使用如下:

    安装ccache

    yum install ccache
    查看ccache 安装位置

    whereis ccache

    查看安装路径, /usr/bin/ccache
    创建gcc,g++链接

    mkdir ~/.bin

    cd ~/.bin/

    ln -s /usr/bin/ccache gcc

    ln -s /usr/bin/ccache g++
    设置PATH,更改本地.bash_profile文件,修改gcc,g++链接到ccache

    vim ~/.bashrc

    添加 export PATH=(HOME/.bin:)PATH
    确认是否生效

    which g++

    如果是$HOME/.bin/g++就成功了;

    直接编译项目,飞一样的感觉。
    经查,gcc还支持多核编译,还没有测试(因为我们已经超级快了),有兴趣的可以参考https://www.cnblogs.com/jacktu/archive/2010/07/15/1777974.html。

    最近配管测试下来,ccache有个问题,就是如果头文件都变了的化,第一次编译的时候就和平常一样了,比较慢,此时还是需要借助gcc的-j8进行多核编译。不过通常来说,大型文件每次变更所有头文件的概率是很小的,变化的只是一小部分,我们也发现了目前每天发布都是一个版本,导致头文件变更存在问题,已经在研究根据模块修改,而不是一撸子全部在一个大版本号中。这也充分说明了逻辑架构如果错了,实现再优秀没有用。就像我们要造一辆每次可以运50人的车,如果设计出来是跑车的架子,怎么地都是很难达到好的目标的。

    https://www.cnblogs.com/zhjh256/p/9296737.html
    另外好像还有个。

    linux编译命令:tmpfs,make,distcc,ccache
    https://www.cnblogs.com/forforever/p/13637082.html
    tmpfs: 解决IO瓶颈,充分利用本机内存资源
    make -j: 充分利用本机计算资源
    distcc: 利用多台计算机资源
    ccache: 减少重复编译相同代码的时间
    这些工具的好处都在于布署的成本相对较低,综合利用这些工具,就可以轻轻松松的节省相当可观的时间。上面介绍的都是这些工具最基本的用法,更多的用法可以参考它们各自的man page。

  • 相关阅读:
    codeforces 669C C. Little Artem and Matrix(水题)
    codeforces 669B B. Little Artem and Grasshopper(水题)
    oracle drop table recyclebin恢复
    odu恢复drop表--不通过logmnr挖掘object_id
    odu恢复drop表--通过logmnr挖掘object_id
    odu恢复delete 表
    GO学习-(7) Go语言基础之流程控制
    GO学习-(6) Go语言基础之运算符
    GO学习-(4) Go语言基础之变量和常量
    GO学习-(3) VS Code配置Go语言开发环境
  • 原文地址:https://www.cnblogs.com/marklove/p/15147702.html
Copyright © 2011-2022 走看看