Linux系列讲解 —— 使用ccache提高编译速度

Android源码编译与烧写全流程实战指南:从环境搭建到设备部署 Android系统构建是移动开发领域的核心技术环节,涉及从源代码到可运行系统的完整转换过程。其原理基于模块化编译和镜像打包,通过构建系统(如Soong/Bazel)将Java、C++及资源文件整合为可分发的系统镜像。这一技术的核心价值在于实现系统级定制、性能优化及硬件适配,广泛应用于ROM定制、设备驱动开发和系统级功能扩展等场景。本文聚焦于Android源码编译与烧写全流程,详细解析环境配置、源码同步、构建参数选择等关键步骤,并针对fastboot工具使用、镜像烧录及设备驱动集成等工程实践提供解决方案,帮助 阅读详情

超大型项目(如android系统)在普通电脑上的编译往往都需要好几个小时的时间,非常影响开发调试等工作。令人欣慰的是,使用ccache编译缓存机制可以一定程度的减少编译时间。

*这里建议用github上的ccache项目,下载好源码之后在本地编译出安装包,然后安装到ubuntu系统。

1. 下载ccache源码

sun@sun-pc:~/myproject$ git clone https://github.com/ccache/ccache.git
正克隆到 'ccache'...
remote: Enumerating objects: 23568, done.
remote: Counting objects: 100% (2505/2505), done.
remote: Compressing objects: 100% (359/359), done.
remote: Total 23568 (delta 2268), reused 2254 (delta 2145), pack-reused 21063
接收对象中: 100% (23568/23568), 10.49 MiB | 157.00 KiB/s, 完成.
处理 delta 中: 100% (17362/17362), 完成.

2. 编译并安装ccache

sun@sun-pc:~/myproject$ cd ccache
sun@sun-pc:~/myproject/ccache$ mkdir build && cd build

#用cmake构建工程编译文件,如果没有用apt安装就行,构建成功后此文件夹会出现Makefile等文件
sun@sun-pc:~/myproject/ccache/build$ cmake -DCMAKE_BUILD_TYPE=Release ..

#编译ccache
sun@sun-pc:~/myproject/ccache/build$ make

#安装ccache,默认安装位置/usr/local/bin/
sun@sun-pc:~/myproject/ccache/build$ sudo make install

问题及解决方案:
(1) 执行cmake出现下面问题,提示CMake版本过低

sun@sun-pc:~/myproject/ccache/build$ cmake -DCMAKE_BUILD_TYPE=Release ..
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.15 or higher is required.  You are running version 3.10.2


-- Configuring incomplete, errors occurred!

解决方法:apt源的软件版本一般较低,可以安装snap上的新版CMake

#使用snap安装cmake
sun@sun-pc:~/myproject/ccache/build$ sudo snap install cmake --classic

#如果没有配置snap的PATH,需要配置一下
sun@sun-pc:~/myproject/ccache/build$ PATH=$PATH:/snap/bin

#查看安装的cmake版本,可以看到这个版本是大于3.15的,符合要求
sun@sun-pc:~/3rdcode/ccache/build$ cmake --version
cmake version 3.24.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

(2) 如果make的过程中,出现下面问题,那是因为c++版本不对,filesystem是c++17的库,安装c++17请参考Linux系列讲解 —— Ubuntu18.04安装gcc 9.1.0(C++17)

sun@sun-pc:~/myproject/ccache/build$ make
...
In file included from /home/sun/myproject/ccache/src/Args.cpp:21:0:
/home/sun/myproject/ccache/src/Util.hpp:25:10: fatal error: filesystem: 没有那个文件或目录
 #include <filesystem>
          ^~~~~~~~~~~~
compilation terminated.
src/CMakeFiles/ccache_framework.dir/build.make:75: recipe for target 'src/CMakeFiles/ccache_framework.dir/Args.cpp.o' failed
make[2]: *** [src/CMakeFiles/ccache_framework.dir/Args.cpp.o] Error 1
CMakeFiles/Makefile2:844: recipe for target 'src/CMakeFiles/ccache_framework.dir/all' failed
make[1]: *** [src/CMakeFiles/ccache_framework.dir/all] Error 2
Makefile:165: recipe for target 'all' failed
make: *** [all] Error 2

3. 配置环境变量

export USE_CCACHE=1                        #是否开启ccache,如果不用请设置为0
export CCACHE_COMPRESS=1                   #编译缓存是否压缩,压缩节省空间但性能略低。【 1:压缩 】【 0:不压缩 】
export CCACHE_EXEC=/usr/local/bin/ccache   #ccache的执行程序路径
export CCACHE_DIR=                         #这个是缓存文件路径,默认是 ~/.ccache目录
${CCACHE_EXEC} -M 50G                      #设置缓存目录大小,根据具体情况而定

问题及解决方案:
如果在执行${CCACHE_EXEC} -M 50G的时候,发生类似下面的错误,原因是libstdc++.so.6里边没有GLIBCXX_3.4.26符号,而libstdc++.so.6是个软链接,指向某个版本的libstdc++.so.6.x.x,所以说只要将包含GLIBCXX_3.4.26符号的libstdc++.so库拷贝到lib64目录,并将libstdc++.so.6重新链接这个新库即可。

/usr/local/bin/ccache: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /usr/local/bin/ccache)

gcc 9.1.0源码包中有包含GLIBCXX_3.4.26的libstdc++库,如果想安装gcc 9.1.0请参考Linux系列讲解 —— Ubuntu18.04安装gcc 9.1.0(C++17)。
可以使用strings命令查看库中的符号,进而找到符合要求的libc++库文件。可以参考下面的命令:

find -name "libstdc++.so.*"
strings ./build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.26 | grep GLIBCXX_3.4.26

4. 验证ccache的编译速度提升

试验对象:高通QCM6125平台的Android10代码
电脑配置:I7-10700(8核16线程),32G RAM,SN550 1T固态硬盘

每一次编译前都会删除out目录,数据如下:

#第一次编译的时间感觉有点怪,可能是我out目录忘了清理。第一次编译要从头开始缓存编译文件,正常要慢一些的。
共耗时: 128min 33s   第一次编译 -j8   USE_CCACHE=true  
共耗时: 93min 2s     第二次编译 -j8   USE_CCACHE=true
共耗时: 88min 32s    第三次编译 -j16  USE_CCACHE=true
共耗时: 204min 31s   第四次编译 -j16  USE_CCACHE=false
共耗时: 241min 28s   第五次编译 -j8   USE_CCACHE=false
共耗时: 91min 34s    第六次编译 -j8   USE_CCACHE=true
R devtools install_github 报错排查:3步定位编译工具缺失与路径问题 本文详细解析了R中使用devtools::install_github安装包时常见的编译工具链缺失问题,提供了针对Linux、macOS和Windows三大操作系统的具体解决方案。通过系统环境检查、工具链配置和环境变量设置三步走策略,帮助用户快速定位并解决presto等R包安装过程中的报错问题,特别强调了pkgbuild工具在诊断中的关键作用。 阅读详情

相关推荐

Pixel3XL Android12 AOSP 编译与刷机全流程实战指南

本文提供了一份详尽的Pixel 3XL Android 12 AOSP编译与刷机实战指南。从搭建Linux编译环境、获取源码与专属驱动,到执行编译命令生成系统镜像,最后完成刷机与问题排查,手把手教你完成从代码到可运行系统的全过程,适用于希望深度定制Android系统的开发者与爱好者。

j2k3l4的博客 998

编译缓存实战:ccache集成与性能调优全解析

本文全面解析ccache编译缓存的集成与性能调优,帮助开发者显著提升编译速度。从安装配置到构建系统集成,再到性能监控与缓存维护,详细介绍了如何在实际项目中应用ccache,实现编译时间从数十分钟缩短至几秒的飞跃。特别适合频繁编译的C/C++项目开发者。

weixin_30301449的博客 505

Android 12 AOSP从零构建实战:全编译与单编Framework效率指南

Android开源项目(AOSP)是理解移动操作系统底层运行机制的核心。其构建系统基于模块化设计,通过Makefile和Soong/Bazel构建工具链管理数百个Git仓库的依赖关系与编译流程。掌握AOSP编译不仅能深入理解Android系统架构,更是进行ROM定制、系统级调试和Framework层开发的必备基础能力。在实际开发中,频繁修改系统API或资源时,全编译耗时巨大,此时“单编Framework”技术成为关键,它通过精准编译特定模块(如framework.jar)而非整个系统,将编译时间从数小时缩短

weixin_34218579的博客 533

CMake Error:CMake 3.14 or higher is required. You are running version 3.10.2

解决CMake版本过低问题,安装更高版本CMake

qq_36852840的博客 5861

【Qt】跨平台开发实战:Windows与Linux下QtCreator构建套件配置全解析(gcc/g++/gdb/cmake)

本文详细解析了在Windows和Linux平台下配置QtCreator构建套件的完整流程,涵盖gcc/g++/gdb/cmake等工具链的设置技巧。通过对比双平台配置差异,提供常见报错解决方案和性能优化建议,帮助开发者快速搭建跨平台Qt开发环境,提升开发效率。

weixin_28834169的博客 166

使用ccache提高编译速度——Linux系统下的安装和使用

ccache是一个用于提高编译速度的工具,它通过缓存已编译的对象文件来避免重新编译。在Linux系统中,我们可以轻松地安装和配置ccache,以加快编译过程。通过安装和使用ccache,我们可以显著加快编译过程。ccache的缓存机制可以避免不必要的重新编译,特别是在多次编译相同代码时,效果更加明显。以上命令会自动利用ccache的缓存机制,如果之前已经编译过相同的代码,ccache将直接使用缓存的对象文件,从而加快编译速度。在正常编译前加入ccache前缀,ccache将自动缓存和重用已编译的对象文件。

CyberFlare的博客 1239

flutter run -d windows报错:CMake 3.15 or higher is required

问题 在Windows上执行flutter run -d windows报错了: PS D:\src\test_desktop> flutter run -d windows Running "flutter pub get" in test_desktop... 525ms Launching lib\main.dart on Windows in debug mode... CMake Error at CMakeLists.txt:1 (cmake_m

干志雄的博客 1722

Miniconda3迁移(附图详细过程)

服务器上目录占满,想要将conda迁移到其他目录下的操作方法,详细教程。

2301_77554343的博客 6942

android源码中ccache使用及原理简介

可以使用编译器高速缓存工具complier cache(ccache)来加快编译速度. 如果你经常"make clean" , ccache能大大缩短再次编译的时间 可以通过设置以下命令来启用ccache。可以将该环境变量写入.bashrc或类似文件,避免每次都设置。 $ export USE_CCACHE=1 默认cache存储在~/.ccache. 可以使用下列命令来设置路

愤怒的菜鸟 1万+

华为路由器静态路由配置实战:从零搭建企业级网络环境(含常见错误排查)

本文以真实企业组网案例为基础,详细解析华为路由器静态路由的实战配置流程。内容涵盖从网络拓扑规划、IP地址分配到具体的`ip route-static`命令配置,并重点讲解了缺省路由、浮动路由等进阶应用。文章还提供了系统化的排错指南,帮助网络工程师规避回程路由缺失、子网掩码错误等常见问题,是掌握企业级网络搭建与维护的实用指南。

weixin_29313817的博客 89

LabVIEW 调用MATLAB 进行图像处理的实现

程机械及设备的变形、振动、冲击、粗糙度、刚度和强度等特性,还可用在土木结构、水利设施的变形测量[4][5]。因此,该技术在机械、土木、水利、电器、航空航天、兵器工业及生物医学等领域的检测中具有非常重要的地位。将物面前方空间的散斑用摄像设备记录下来,当物体运动或由于受力而变形时,这些随机分布的散斑图也随之在空间按一定的规律运动,因此能用记录的散斑图在计算机上分析物体的运动和变形,这就是电子散斑技术。当物体的漫反射表面被激光照射时,漫反射的光波在物体表面的前方相互干涉,由于漫反射光的。

qq_37971227的博客 3873

解决Cmake版本过低

等待结束,然后输入:sudo make install。提醒一下叉掉原来的终端,重新打开使用cmake ..使用命令 :cmake --version。下载后解压,运行./configure。按照提示,输入:make。

weixin_44760904的博客 6462

ADC(三)Guard ring的设计艺术:从单元到系统的隔离策略

本文深入探讨了ADC设计中Guard ring(保护环)从单元到系统的多层次隔离策略。文章分享了从新手到专家的认知升级过程,详细分析了在单元内部进行微隔离、在模块间建立噪声屏障以及在系统层面规划全局隔离带的实用方法与设计艺术,强调了Guard ring对于提升混合信号电路性能和可靠性的关键作用。

weixin_28312391的博客 150

Linux内核开发——编译Ubuntu 20.04内核代码

可以使用下列可以直接下载一个比当前内核版本新的代码,也可以去https://mirrors.edge.kernel.org/pub/linux/kernel下载自己内核使用的版本。此文下载的是更新的版本 5.17.15,去官网https://www.kernel.org/,下载linux-5.17.12.tar.xz。不同版本的Ubuntu,需要对应不同版本的源。可以通过。https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/上可以选择不同版本的Ubuntu对应的源

飞鹤的程序员人生 1万+

Python 爬虫实战:在房天下抓取房产信息,分析房价走势

通过本次 Python 爬虫实战,我们成功地从房天下爬取了房产信息,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分区域的房产数据,且未对房产的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多区域的房产数据,并深入分析房产的多媒体内容、用户行为模式等,为购房者和房地产从业者提供更有价值的数据支持。

u014481728的博客 1367

在 SAP HANA 里为视图创建 Analytic Privilege,真正把同一份数据按角色切开

摘要:本文介绍了SAP HANA中基于业务角色的动态数据权限控制方法。通过Analytic Privilege技术,可以在同一视图上为不同角色设置不同的数据访问范围,实现行级安全控制。核心机制包括:1) 创建带有STRUCTURED PRIVILEGE CHECK的视图;2) 建立授权对象和用户映射表;3) 开发条件提供过程动态生成过滤条件;4) 创建结构化权限对象绑定条件提供器。这种设计使权限规则与业务数据解耦,便于维护变更,适合销售区域、财务数据等多角色访问控制场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2392

GCC命令行编译与多文件路径管理实战指南

编译器是将源代码转换为可执行程序的核心工具,其中GCC作为Linux/Unix系统的标准编译器套件,其命令行操作是开发者必须掌握的基础技能。通过预处理、编译、汇编和链接四个关键阶段,GCC完成从源代码到机器码的完整转换流程。在多文件项目管理中,合理的路径配置策略直接影响编译效率,包括使用-I参数指定头文件路径、分步编译对象文件等工程实践方法。掌握这些技术不仅能解决常见的'头文件找不到'等编译错误,更是构建自动化编译系统的基础。结合Makefile或CMake等构建工具,可以显著提升C/C++项目的开发效率,

weixin_33725239的博客 348

RT-DETR算法优化改进:DCNv4更快收敛、更高速度、更高性能,效果秒杀DCNv3、DCNv2等 ,助力检测

DCNv4更快收敛、更高速度、更高性能,完美和RT-DETR结合,助力涨点

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1323

Godot 源码编译全流程:环境配置、SCons 构建与模块裁剪排错

从预编译二进制到源码构建,游戏引擎的可定制能力往往取决于构建系统与工具链。以 Godot 为例,源码编译依赖 Python、SCons 和平台 C++ 编译器,通过编译参数控制目标平台、架构、编辑器或导出模板,并可利用模块裁剪减小包体、加速构建。理解这套原理,有助于应对版本错配、环境缺失、内存中断等高频报错,也能支撑引擎改造、自定义模块、移动端发布与多平台适配。围绕 Godot 下载、源码获取、SCons 参数、模块开关与导出模板配置,下面给出一条可复现的工程实践路径。

weixin_34008933的博客 376

8. Spring Ai之入门到精通(超级详细)

Spring AI 1.0.0 M1里程碑版本发布,标志着 Java 终于踏进Ai的时代半只脚。

gorgor在码农 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ESP-IDF开发环境搭建实战指南:从零到一构建物联网开发平台

ESP-IDF(Espressif IoT Development Framework)是乐鑫官方提供的物联网开发框架,专为ESP32系列芯片设计,支持Wi-Fi、蓝牙、低功耗等丰富功能。本指南面向中级开发者,深入解析ESP-IDF环境搭建的核心挑战与解决方案,帮助您快速构建稳定的物联网开发平台。 ## 挑战一:跨平台环境配置的复杂性 不同操作系统下的环境配置是ESP-IDF开发者面临的首要挑

gitblog_00255的博客 783

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Linux 交叉构建 OHOS x86_64/aarch64 工具链:仓颉 SDK 集成构建的前置指南

本篇指南讲解如何在 Ubuntu 22.04 LTS 上,从 OpenHarmony(OHOS)源码出发交叉编译出 `ohos-x86_64` 与 `ohos-aarch64` 两套工具链——包括 musl libc、OpenSSL 以及由 `ohos-sdk` 产物组装而成的完整 sysroot 与 LLVM/Clang 工具链。这套工具链是仓颉(Cangjie)SDK 中"宿主平台无关"的部分

gitblog_00903的博客 89

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

AOSP源码编译环境搭建全攻略:Ubuntu系统选型与依赖配置详解

在Android系统开发中,AOSP(Android Open Source Project)源码编译是深入理解安卓底层机制的基础环节。其本质是通过源码同步、构建工具链配置与系统镜像生成,完成从代码到可运行固件的转换。掌握这一技术的关键在于合理规划硬件资源,并匹配正确的主机系统、OpenJDK版本及依赖库。实际工程中,Ubuntu 16.04与20.04的选型、libncurses5缺失、repo镜像源选择等问题常导致编译失败。通过科学配置磁盘、内存与swap,并选用清华或中科大镜像同步代码,可显著提升成功

weixin_30745553的博客 407

LLVM编译器基础设施入门:源码构建与第一个Pass开发实战

编译器是软件工程的核心基础设施,它将高级语言翻译为可执行的机器码。对于C/C++程序员和工具链开发者而言,理解LLVM这类模块化编译器框架,不仅能深入编译原理,更能掌握工业级代码优化与静态分析的方法。LLVM以中间表示(IR)为接口,将前端解析、优化管道与后端代码生成解耦,形成一套可供编程的编译器乐高积木。通过源码构建llvm-project,开发者可以定制自己的工具链,并基于Pass机制实现自定义的分析或变换逻辑。无论是为自研语言接入高性能后端,还是构建领域专用编译器(如MLIR),LLVM都提供了统一的

weixin_33785108的博客 392

ESP32开发环境搭建实战指南:ESP-IDF v5.4.1避坑与加速技巧

作为一名ESP32开发者,我深知搭建开发环境时踩过的坑比写过的代码还多。这份实战笔记将带你用"问题-方案-验证"的思路,系统性解决ESP-IDF环境配置中的各种疑难杂症,让你少走弯路,快速跑通开发流程。无论你使用Windows、Linux还是macOS,都能在这里找到适合自己的跨平台开发配置方案。 ## 解决系统兼容性问题 ### 检查操作系统兼容性 在开始配置前,我曾因为系统版本不兼容浪费

gitblog_01036的博客 973

llama.cpp 本地编译完整教程:从克隆仓库到跑通第一条大模型推理

跟着本文操作完,你会在 `build/bin/` 目录里拿到一条完整的本地推理工具链(llama-cli、llama-server、llama-quantize 等),并在自己的机器上离线跑通第一条大模型推理命令。主角是 llama.cpp——一个纯 C/C++ 实现的 LLM 推理引擎,输入 GGUF 格式的开源权重,无需云端 API,Windows、macOS、Linux 都能本地编译运行。

gitblog_00173的博客 452
上一篇: Linux系列讲解 —— Ubuntu18.04安装gcc 9.1.0(C++17)
下一篇: Android系统 —— image文件解析
星际工程师
博客等级 码龄9年 1万+粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星际工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值