【淘宝源码图标】【美丽书源码】【修改monkey源码】ccache源码

时间:2024-12-22 19:29:54 分类:苹果源码音频 来源:财富女神指标源码

1.ccacheԴ?源码?
2.LLVM(MLIR)安装编译
3.如何使用arm-linux-androideabi-addr2line
4.android系统编译能用分布式编译吗
5.如何评价xmake?

ccache源码

ccacheԴ??

       随着 C++ 项目的持续扩大,编译效率成为了一个大问题。源码那么,源码如何在不修改源码或更换硬件的源码情况下显著提升编译速度呢?这里有一些高效的方法,可以让你的源码编译速度飞跃提升。

       首先,源码淘宝源码图标尝试启用多核编译。源码通过在 Qt Creator 中设置环境变量“MAKEFLAGS=-j”,源码可以充分利用机器性能,源码加快编译过程。源码这里的源码数字应根据电脑的 CPU 核心数和线程数来调整,例如,源码如果是源码 8 核 线程,建议设置为 。源码美丽书源码

       如果需要针对特定项目进行优化,源码可以利用 qmake 或 cmake 来设置并行工作线程的个数。在 qmake 中,通过调整“Parallel jobs”或“Make arguments”即可。在 cmake 的 CMakeLists.txt 文件中,添加相关配置,将 ccache 作为编译命令和链接命令的启动器。

       使用 ccache 编译器缓存是一个有力的工具,它能高速缓存编译生成的信息,利用高速缓存来节省解析头文件所需的时间。安装 ccache 并按照上述方法进行配置后,你会发现编译速度显著提升,有时甚至可以达到令人难以置信的修改monkey源码提升效果,比如从最初的 秒优化到仅需 1 秒,效率提升了近 倍。

       通过采用这些方法,你的 C++ 项目编译速度将会显著提高,节省大量时间。记得在配置完成后重新编译,以验证优化效果。

LLVM(MLIR)安装编译

       本文旨在为有兴趣自行安装和编译 LLVM(利用 MLIR 作为后端输出的主要方式)的读者提供一份详细指南。在实际操作过程中,可能会遇到一些理解上的偏差,欢迎指正。由于目标是能在 x 和 RISCV 上运行,所有配置均基于 i7-H 笔记本,金蝶vb源码运行 Ubuntu . LTS 系统。

       以下是编译配置的步骤:

       第一步:下载 LLVM 的源码。确保已安装 git,若未安装,请执行 sudo apt-get install git。创建名为 LLVM 的文件夹存放 LLVM 源码,并将源码文件夹命名为 llvm-project。接着,通过 git 下载 LLVM 源码。

       第二步:建立用于 LLVM 编译的文件夹。为了区分编译产生的文件和源文件,建立名为 build 的文件夹。在教程中,innerhtml 写源码每段代码都以 cd 到主文件夹,然后进入工程文件夹的方式进行,便于理解。

       第三步:进入 build 文件夹,完成编译配置。此过程大致分为如何编译、编译什么、为谁编三个部分。具体参数如下:

       如何编译:指定编译器类型、线程数及目标地址。例如,使用 -DLLVM_PARALLEL_COMPILE_JOBS=### 设置并行编译工作数,使用 -DCMAKE_INSTALL_PREFIX=*** 指定安装路径,使用 -DLLVM_CCACHE_BUILD=### 选择是否使用 ccache。选择 C 和 C++ 编译器,如 -DCMAKE_C_COMPILER=### 和 -DCMAKE_CXX_COMPILER=###。启用 LLD 作为链接器以提高效率,可通过 -DLLVM_ENABLE_LLD=ON 实现。

       编译什么:设置编译版本类型,如 Debug、Release 等,使用 -DCMAKE_BUILD_TYPE=###。同时,通过 -DLLVM_ENABLE_PROJECTS=### 配置需要编译的子项目。

       为谁编:指定目标平台,如 x 和 RISCV,使用 -DLLVM_TARGETS_TO_BUILD=###。可选平台包括但不限于:AArch、AMDGPU、ARM、AVR、BPF、Hexagon 等。

       注意:在完成编译配置后,执行编译命令。在遇到可能的问题时,检查错误信息并根据需要调整参数。最后,根据实际需求进行文件路径、编译选项等的调整。

       以上步骤和参数配置将帮助您成功安装和编译 LLVM,满足在 x 和 RISCV 上运行的需求。通过本文提供的指南,希望能为您的项目开发提供便利。如有任何疑问或需要进一步的帮助,请随时提问。

如何使用arm-linux-androideabi-addr2line

       1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如:

       export PATH=$PATH:~/dlna/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x/bin

       2.使配置生效:source ~/.bashrc

       3.使用工具。例如:arm-linux-androideabi-addr2line -C -f -e ~/workspace/DLNA/libs/armeabi/libctrlpt.so deb4

       å…¶ä¸­ï¼Œdeb4为堆栈信息中pc的值。

       android应用崩溃的调试方法

       æœ‰ä¸¤ç§æ–¹æ³•å¯ä»¥åˆ†æž crash 的堆栈信息

       1 google提供了一个python脚本,可以从

       /p/android-ndk-stacktrace-analyzer/

       ä¸‹è½½è¿™ä¸ªpython脚本,然后使用 adb logcat -d > logfile 导出 crash 的log,

       ä½¿ç”¨ arm-eabi-objdump 位于build/prebuilt/linux-x/arm-eabi-4.2.1/bin下面

       æŠŠso或exe转换成汇编代码,如:arm-eabi-objdump -S mylib.so > mylib.asm,

       ä½¿ç”¨è„šæœ¬

       python parse_stack.py <asm-file> <logcat-file>

       2 直接使用NDK下面的arm-linux-androideabi-addr2line

       (D:\android-ndk-r8\toolchains\arm-linux-

       androideabi-4.4.3\prebuilt\windows\bin\arm-linux-androideabi-addr2line.exe)

       ä¾‹å¦‚:arm-linux-androideabi-addr2line -C -f -e libxxx.so 0x#####(address)

       android调试工具addr2line使用补充

       ä½¿ç”¨addr2line追踪自有动态库(so文件)的bug, 补充:

       è§£å†³å‡ºçŽ° ?:0 , 没法展示源代码行数的问题

       åœ¨Android.mk 文件中:

       Java代码

       LOCAL_CFLAGS

       :=

       -D__STDC_CONSTANT_MACROS

       -Wl,-Map=test.map

       -g

       è¡¥å……2个编译参数 -Wl,-Map=test.map -g .

       å¢žåŠ gcc警告和调试标志

       arm-linux-androideabi-addr2line -C -f -e /项目目录/obj/local/armeabi/libfaa_jni.so e

       tip: 1,注意调试文件的位置在obj目录下,并非libs目录下生成的so文件

        2,e 为出错的机制位置

       è¿˜æœ‰ï¼š

       åœ¨jni/目录下增加Application.mk 文件, 修改为debug 模式,进行调试 APP_OPTIM := debug

android系统编译能用分布式编译吗

       é¡¹ç›®è¶Šæ¥è¶Šå¤§ï¼Œæ¯æ¬¡éœ€è¦é‡æ–°ç¼–译整个项目都是一件很浪费时间的事情。Research了一下,找到以下可以帮助提高速度的方法,总结一下。

       1. 使用tmpfs来代替部分IO读写

       ã€€ã€€2.ccache,可以将ccache的缓存文件设置在tmpfs上,但是这样的话,每次开机后,ccache的缓存文件会丢失

       ã€€ã€€3.distcc,多机器编译

       ã€€ã€€4.将屏幕输出打印到内存文件或者/dev/null中,避免终端设备(慢速设备)拖慢速度。

       ã€€tmpfs

       ã€€ã€€æœ‰äººè¯´åœ¨Windows下用了RAMDisk把一个项目编译时间从4.5小时减少到了5分钟,也许这个数字是有点夸张了,不过粗想想,把文件放到内存上做编译应该是比在磁盘上快多了吧,尤其如果编译器需要生成很多临时文件的话。

       ã€€ã€€è¿™ä¸ªåšæ³•çš„实现成本最低,在Linux中,直接mount一个tmpfs就可以了。而且对所编译的工程没有任何要求,也不用改动编译环境。

       ã€€ã€€mount -t tmpfs tmpfs ~/build -o size=1G

       ã€€ã€€ç”¨2.6..2的Linux Kernel来测试一下编译速度:

       ã€€ã€€ç”¨ç‰©ç†ç£ç›˜ï¼šåˆ†ç§’

       ã€€ã€€ç”¨tmpfs:分秒

       ã€€ã€€å‘ƒâ€¦â€¦æ²¡ä»€ä¹ˆå˜åŒ–。看来编译慢很大程度上瓶颈并不在IO上面。但对于一个实际项目来说,编译过程中可能还会有打包等IO密集的操作,所以只要可能,用tmpfs是有益无害的。当然对于大项目来说,你需要有足够的内存才能负担得起这个tmpfs的开销。

       ã€€ã€€make -j

       ã€€ã€€æ—¢ç„¶IO不是瓶颈,那CPU就应该是一个影响编译速度的重要因素了。

       ã€€ã€€ç”¨make -j带一个参数,可以把项目在进行并行编译,比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。

       ã€€ã€€è¿˜æ˜¯ç”¨Kernel来测试:

       ã€€ã€€ç”¨make: 分秒

       ã€€ã€€ç”¨make -j4:分秒

       ã€€ã€€ç”¨make -j8:分秒

       ã€€ã€€ç”±æ­¤çœ‹æ¥ï¼Œåœ¨å¤šæ ¸CPU上,适当的进行并行编译还是可以明显提高编译速度的。但并行的任务不宜太多,一般是以CPU的核心数目的两倍为宜。

       ã€€ã€€ä¸è¿‡è¿™ä¸ªæ–¹æ¡ˆä¸æ˜¯å®Œå…¨æ²¡æœ‰cost的,如果项目的Makefile不规范,没有正确的设置好依赖关系,并行编译的结果就是编译不能正常进行。如果依赖关系设置过于保守,则可能本身编译的可并行度就下降了,也不能取得最佳的效果。

       ã€€ã€€ccache

       ccache工作原理:

       ccache也是一个编译器驱动器。第一趟编译时ccache缓存了GCC的“-E”输出、编译选项以及.o文件到$HOME/.ccache。第二次编译时尽量利用缓存,必要时更新缓存。所以即使"make clean; make"也能从中获得好处。ccache是经过仔细编写的,确保了与直接使用GCC获得完全相同的输出。

       ã€€ã€€ccache用于把编译的中间结果进行缓存,以便在再次编译的时候可以节省时间。这对于玩Kernel来说实在是再好不过了,因为经常需要修改一些Kernel的代码,然后再重新编译,而这两次编译大部分东西可能都没有发生变化。对于平时开发项目来说,也是一样。为什么不是直接用make所支持的增量编译呢?还是因为现实中,因为Makefile的不规范,很可能这种“聪明”的方案根本不能正常工作,只有每次make clean再make才行。

       ã€€ã€€å®‰è£…完ccache后,可以在/usr/local/bin下建立gcc,g++,c++,cc的symbolic link,链到/usr/bin/ccache上。总之确认系统在调用gcc等命令时会调用到ccache就可以了(通常情况下/usr/local /bin会在PATH中排在/usr/bin前面)。

       ã€€ã€€å®‰è£…的另外一种方法:

       ã€€ã€€vi ~/.bash_profile

       ã€€ã€€æŠŠ/usr/lib/ccache/bin路径加到PATH下

       ã€€ã€€PATH=/usr/lib/ccache/bin:$PATH:$HOME/bin

       ã€€ã€€è¿™æ ·æ¯æ¬¡å¯åŠ¨g++的时候都会启动/usr/lib/ccache/bin/g++,而不会启动/usr/bin/g++

       ã€€ã€€æ•ˆæžœè·Ÿä½¿ç”¨å‘½ä»¤è¡Œccache g++效果一样

       ã€€ã€€è¿™æ ·æ¯æ¬¡ç”¨æˆ·ç™»å½•æ—¶ï¼Œä½¿ç”¨g++编译器时会自动启动ccache

       ã€€ã€€ç»§ç»­æµ‹è¯•ï¼š

       ã€€ã€€ç”¨ccache的第一次编译(make -j4):分秒

       ã€€ã€€ç”¨ccache的第二次编译(make -j4):8分秒

       ã€€ã€€ç”¨ccache的第三次编译(修改若干配置,make -j4):分秒

       çœ‹æ¥ä¿®æ”¹é…ç½®ï¼ˆæˆ‘改了CPU类型...)对ccache的影响是很大的,因为基本头文件发生变化后,就导致所有缓存数据都无效了,必须重头来做。但如果只是修改一些.c文件的代码,ccache的效果还是相当明显的。而且使用ccache对项目没有特别的依赖,布署成本很低,这在日常工作中很实用。

       ã€€ã€€å¯ä»¥ç”¨ccache -s来查看cache的使用和命中情况:

       ã€€ã€€cache directory           /home/lifanxi/.ccachecache hit              cache miss             called for link            not a C/C++ file          no input file            files in cache           cache size             .7 Mbytesmax cache size           .6 Mbytes

       ã€€ã€€å¯ä»¥çœ‹åˆ°ï¼Œæ˜¾ç„¶åªæœ‰ç¬¬äºŒç¼–次译时cache命中了,cache miss是第一次和第三次编译带来的。两次cache占用了.7M的磁盘,还是完全可以接受的。

       ã€€ã€€distcc

       ã€€ã€€ä¸€å°æœºå™¨çš„能力有限,可以联合多台电脑一起来编译。这在公司的日常开发中也是可行的,因为可能每个开发人员都有自己的开发编译环境,它们的编译器版本一般是一致的,公司的网络也通常具有较好的性能。这时就是distcc大显身手的时候了。

       ã€€ã€€ä½¿ç”¨distcc,并不像想象中那样要求每台电脑都具有完全一致的环境,它只要求源代码可以用make -j并行编译,并且参与分布式编译的电脑系统中具有相同的编译器。因为它的原理只是把预处理好的源文件分发到多台计算机上,预处理、编译后的目标文件的链接和其它除编译以外的工作仍然是在发起编译的主控电脑上完成,所以只要求发起编译的那台机器具备一套完整的编译环境就可以了。

       ã€€ã€€distcc安装后,可以启动一下它的服务:

       ã€€ã€€/usr/bin/distccd --daemon --allow ..0.0/

       ã€€ã€€é»˜è®¤çš„端口允许来自同一个网络的distcc连接。

       ã€€ã€€ç„¶åŽè®¾ç½®ä¸€ä¸‹DISTCC_HOSTS环境变量,设置可以参与编译的机器列表。通常localhost也参与编译,但如果可以参与编译的机器很多,则可以把localhost从这个列表中去掉,这样本机就完全只是进行预处理、分发和链接了,编译都在别的机器上完成。因为机器很多时,localhost的处理负担很重,所以它就不再“兼职”编译了。

       ã€€ã€€export DISTCC_HOSTS="localhost ...1 ...2 ...3"

       ã€€ã€€ç„¶åŽä¸Žccache类似把g++,gcc等常用的命令链接到/usr/bin/distcc上就可以了。

       ã€€ã€€åœ¨make的时候,也必须用-j参数,一般是参数可以用所有参用编译的计算机CPU内核总数的两倍做为并行的任务数。

       ã€€ã€€åŒæ ·æµ‹è¯•ä¸€ä¸‹ï¼š

       ã€€ã€€ä¸€å°åŒæ ¸è®¡ç®—机,make -j4:分秒

       ã€€ã€€ä¸¤å°åŒæ ¸è®¡ç®—机,make -j4:分秒

       ã€€ã€€ä¸¤å°åŒæ ¸è®¡ç®—机,make -j8:分秒

       ã€€ã€€è·Ÿæœ€å¼€å§‹ç”¨ä¸€å°åŒæ ¸æ—¶çš„分钟相比,还是快了不少的。如果有更多的计算机加入,也可以得到更好的效果。

       ã€€ã€€åœ¨ç¼–译过程中可以用distccmon-text来查看编译任务的分配情况。distcc也可以与ccache同时使用,通过设置一个环境变量就可以做到,非常方便。

       ã€€ã€€æ€»ç»“一下:

       ã€€ã€€ tmpfs: 解决IO瓶颈,充分利用本机内存资源

       ã€€ã€€make -j: 充分利用本机计算资源

       ã€€ã€€distcc: 利用多台计算机资源

       ã€€ã€€ccache: 减少重复编译相同代码的时间

       ã€€ã€€è¿™äº›å·¥å…·çš„好处都在于布署的成本相对较低,综合利用这些工具,就可以轻轻松松的节省相当可观的时间。上面介绍的都是这些工具最基本的用法,更多的用法可以参考它们各自的man page。

       ã€€ã€€5.还有提速方法是把屏幕输出重定向到内存文件或/dev/null,因对终端设备(慢速设备)的阻塞写操作也会拖慢速度。推荐内存文件,这样发生错误时,能够查看。

如何评价xmake?

       xmake采用默认直接构建模式,无需依赖makefile和make工具,能自动处理头文件依赖,并开启多任务加速构建流程。内置构建、打包、安装步骤,提供插件扩展机制,支持cmake、premake的makefile和vs工程生成,方便扩展与维护。已有多种内置实用插件。

       简单工程无需makefile文件,xmake直接分析源码编译运行,适用于快速测试临时代码。复杂工程则采用xmake.lua描述文件,利用lua简洁易维护的语法进行维护。

       经过数年迭代,xmake拥有了强大的包管理系统。支持远程编译、分布式编译,并内置本地缓存与远程缓存功能。

       简言之,xmake集合了Make/Ninja、CMake/Meson、Vcpkg/Conan以及distcc、ccache等核心功能,实现高效、灵活的构建与包管理。