工欲善其事,必先利其器——编译开发流程

已经工作几年了,跟着工作项目与自己兴趣,学到了一些知识,觉得对于技术的提炼与能力的提高,需要不断总结,反思,锤炼。所以谋生了写写博客的想法,就当知识的总结与技术的考验。记录下自己的一些想法与知识技巧,也助于自己的进一步学习与技能的提升,如此反复,良性循环......

常言道:“工欲善其事,必先利其器”,对工具的理解与运用是做技术人的一种基本技能,也可以说是一种技巧吧,所以开篇以编译开发流程为始,以此为纲,去记述自己的想法;具体内容如下图所示。


如图示,是以C语言开发的一个严格的流程作为指导,但是对于其他语言开发也是适用的;

红色的实线箭头标识了主要的编译开发步骤;

黑色的实线箭头表示编译过程中出错的反馈,需要编辑源码文件;

黑色的虚线箭头表示可能引入的工具或者步骤

黑色的虚线连接文档表示可能引入的相关文档或者步骤

从上到下的名词解析:

1.源代码生成与辅助工具,主要一些软件可以自动生成源代码框架或者常用代码,比如:Android的Java层AIDL的工具,Java开发的get/set方法自动生成,UML框图直接生成面向对象的工具,开源代码中的一些shell命令生成的编译代码等。

2.自动文档生成工具,根据文档中的注释与特定的格式,生成帮助文档,方便代码理解,比如:javadoc的文档工具,Doxygen的文档分析工具等

3.源代码demo,使用已经存在的可信任代码或者API的源代码实例,利用它可以尽可能快的进行二次开发,也能更好的理解程序运行,比如:Android开发的Apidemo,各种开源代码的测试代码,标准c/c++的代码示例,linux内核中的demo与源码等。

4.引用的库文件,对于c语言是头文件,java是相关的包,这些文件是利用已经有的可信任代码来实现相应的功能,比如:标准c/glibc/unix c等接口,java的标准API的引用等。

5.编辑源代码,利用文本编辑器按照语言规范进行代码编写的过程。

6.lint检查,利用lint工具对源代码进行更严格的分析,尽可能的暴露代码编写时的错误。lint工具可以看作更严格的编译器。

7.预处理,编译器对源代码的宏分析,进行宏展开,代码通过宏可以更简单,更高效,更具可读性的表达逻辑。

8.编译与汇编,对预处理之后的代码翻译生成低级语言(汇编语言),然后通过汇编生成机器码文件(elf目标文件),使生成的文件能够被机器执行。

9.资源文件,如果需要将资源文件(比如:文本,二进制文件,图片,视频,声音等)放到目标文件中被使用,也需要将其编译成elf文件。

10.链接,将汇编生成的elf目标文件,进行地址重定向与elf目标文件进行整合一起生成可行性文件,库文件或者模块文件,他们也是elf文件;在链接的过程也可能引用其他已经生成的elf文件。

11.静态库与动态库,都是elf文件,动态库是在运行中需要被加载的,而且静态库是直接链接到可执行文件或者其他库文件的,静态库也是目标文件的归档形式。它们都是被以API的方式发布给源代码,对于c语言来说就是头文件,java来说就是jar包。

12.可执行文件,也是elf文件,是能够被系统加载执行的文件,它是编译开发过程的一般终点。

13.目标文件分析,是指对所有的elf文件进行结构与内容分析,通过反汇编的方式对elf文件进行解剖得到有意义的信息,或者对开发流程进行优化。

14.加载,系统读取可执行文件的过程,主要是加载可执行文件与动态链接库。

15.动态链接库与运行的关系——prelink,为了提供加载的效率,是程序快速被运行,通过prelink操作,将动态链接库直接加载到对应的地址空间,被程序引用。

16.运行,生成的可执行文件被机器所执行的过程。

17.在虚拟机上运行,只要编写的代码没有被实际运用到目的主机上的执行过程就是,用虚拟机来模拟源代码执行的环境,可以大大提高程序运行效率,也可以防止对系统的破坏,,从而方便程序分析与提高开发效率;比如:Android的系统开发可以在qemu模拟机上运行之,交叉编译执行的c语言软件模块直接在x86的平台上运行调试等。

18.在目标机上运行,最终的运行结果是在目标机器(系统平台与操作系统)运行得到的效果。

19.调试,当运行的结果不如需求所要,则需要对运行状态进行分析,从而满足实际所需,常用的调试方法:1.系统分析,2.添加打印信息观察运行流程与状态,3.单步调试——观察实际运行的效果。

20.系统状态分析,主要是在程序运行中,通过操作系统提供的相关工具,查看程序在系统中的状态

21.调试源代码,对源代码进行打印添加,单步调试,动态分析程序。

22.优化,需要优化的两方面原因,其一为满足需求的优化,程序能够正常运行,但是系统吃紧,需要优化才能更加稳定;其二为提高程序质量与运行效率的目的;

好的流程与严谨的开发过程或许会枯燥一些,但是它可以为技术与项目带来更好的效率与质量;所以需要好好梳理与实践好的流程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值