Linux网管笔记(18):对Linux系统下的开发环境梳理

      尽管Linux开发的相关岗位很多,但长期以来Linux开发没有统一的开发平台,大多数的开发者都直接使用VI、GCC等命令行工具,这样其实不利于大型项目的开发。

1.依然是熟悉的开发流程

在Linux操作系统中,C语言程序的开发和其他环境类似,程序生成主要分成编译、汇编、连接等几个步骤。

编译是指把用高级语言编写的程序转换成相应处理器的汇编语言程序的过程。从本质上讲,编译是一个文本转换的过程。对嵌入式系统而言,一般要把用C语言编写的程序转换成处理器的汇编代码。编译过程包含了C语言的语法解析和汇编语言的生成两个步骤。汇编一般是逐个文件进行的,对于每一个C语言编写的文件,可能还需要进行预处理。

汇编是从汇编语言程序生成目标系统的二进制代码(机器代码)的过程。机器代码的生成和处理器有密切的联系。相对于编译过程的语法解析,汇编的过程相对简单。这是因为对于一款特定的处理器,其汇编语言和二进制的机器代码是一一对应的。汇编过程的输入是汇编代码,这个汇编代码可能来源于编译过程的输出,也可以是直接用汇编语言书写的程序。

连接过程是指将汇编生成的多段机器代码组合成一个可执行程序。一般来说,通过编译和汇编过程,每一个源文件将生成一个目标文件。连接器的作用就是将这些目标文件组合起来,组合的过程包括了代码段、数据段等部分的合并,以及添加相应的文件头。

在Linux的C语言程序生成过程中,源代码经过编译-汇编-连接生成可执行程序。GCC是Linux下主要的程序生成工具,它除了编译器、汇编器、连接器外,还包括一些辅助工具。

    在Linux的程序开发环境下,一般不具有集成开发环境(IDE)。因此,当需要大量编译工程文件的时候,就需要使用自己的方法来管理。如果仅仅手动使用gcc的编译命令,将变得烦琐而单调,而且不利于工程管理。而如果使用Makefile进行工程管理,就可以较好地处理这个问题。

    make 程序最初设计的目的是为了维护C程序文件,防止不必要的重新编译。例如,在使用命令行进行编译的时候,修改了一个工程中的头文件,如何确保包含这个头文件的所有文件都得到编译呢?这些工作可以让make程序来自动完成。make工具对于维护一些具有相互依赖关系的文件特别有用,它对文件和命令的联系(在文件改变时调用来更新其他文件的程序)提供一套编码方法。make工具的基本概念类似于Proglog语言,在使用的过程中只告诉make需要做什么,即提供一些规则,其他的工作由make自动完成。

    make是一个命令工具,具体来说是一个解释Makefile中的指令的命令工具。Makefile的工作原理是调用系统中的make命令解释当前的Makefile,完成其中指定的功能。在很多的IDE中都有这个命令,如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,Makefile已经成为一种在工程方面的编译方法。

2.调试

      调试是程序开发一个很重要的环节。在Linux的程序开发中,最主要的调试工具是GDB。GDB是一个命令行调试工具,可以实现在程序中设置断点、单步执行、查看对应源代码等功能。

      虽然Linux中基本的开发工具GCC和GDB都是命令行工具,但是它们也可以和IDE(集成开发环境)结合使用。

      经过多番比较,下面以Eclipse作为嵌入式Linux开发的集成开发环境。如图所示。

Linux网管笔记(18):对Linux系统下的开发环境梳理_第1张图片

 

3.一点体会

    对于Linux操作系统,目标程序是可执行的ELF(Executable and linking Format)格式;对于uCLinux操作系统,目标程序是Flat格式;对于需要在系统直接运行的程序,目标程序应该是纯粹的二进制代码,载入系统后,直接转到代码区地址执行。

 

你可能感兴趣的:(linux,汇编,语言,工具,makefile,程序开发)