深入浅出 Linux FPI 编译原理(linuxfpic)
Linux 现在在开发PC软件、嵌入式开发以及移动设备软件方面已经大行其道,而编译原理也是其中重要一环。所谓编译原理就是将人们编写的源代码转换成为机器可以识别的二进制代码(0、1序列),以便能够让计算机执行。
(编译原理着重于如何将源代码转换为可执行的二进制代码)
要理解 Linux 编译原理,我们首先要理解编译过程,Linux 编译过程有3步:
1. 预编译:此阶段包括将命令行参数解析为适当的参数,从源文件中包含预处理代码,以及处理宏替换等步骤。它将源代码预处理,将输出转换为它可以由编译器理解的简单格式。
“`C
#include
int main(){
int a = 10;
printf(“a=%d\n”,a);
return 0;
}
在预编译阶段,将会进行代码的预处理,如上面的代码中的`#include`宏会被替换为`stdio.h`的头文件,并且编译器会在编译任务中加入对该头文件的编译任务。
2. 编译:此阶段将源代码转换为机器指令,从而使源代码易于理解和执行。
```C.L.text:0000000000400480 ; ============= segment type: Pure code
.L.text:0000000000400480.L.text:0000000000400480 ; -- File Contents of /usr/include/stdio.h:
.L.text:0000000000400480.L.text:0000000000400480 movl $0xa, %esi
.L.text:0000000000400487 mov $0x4005e0, %edi.L.text:000000000040048c call 0x400400
在编译阶段,将源代码转换为机器指令,如上面的代码是为了实现 printf 函数的调用,将会生成多条汇编指令,例如`movl`、`mov`以及`call`,它们可以被CPU执行来实现 printf 函数的功能。
3. 链接:此阶段包括将编译生成的可重定位目标文件连接在一起,从而生成最终的可执行文件。
“`asm
ff 25 00 a0 40 00 jmp *0x00400a0
在链接阶段,将会为可重定位的文件生成可执行的文件,比如上面的指令` jmp`就是用于跳转到某个指定的地址,当遇到此指令时,CPU会定位转到指定的地址,继续执行下去。
因此,Linux 编译原理由这三个步骤组成,分别是预编译、编译和链接,上述步骤完成之后,就能够生成可执行文件,以便让计算机去执行程序。可以说,了解 Linux 编译原理有助于开发者更好的理解它的编写流程,并且更加高效地开发 Linux 平台的程序。