《韦东山新视频 — GCC编译器的使用》

1.源码

main.c
#include <stdio.h>
#include "sub.h"
int main(int argc, char *argv[])
{
       int i;
       printf("Main fun!\n");
       sub_fun();
       return 0;
}


sub.c
void sub_fun(void)
{
       printf("Sub fun!\n");
}


sub.h
void sub_fun(void);

  最终的可执行程序需要通过main.c和sub.c一起编译才可以。

gcc -o test main.c sub.c

  最后会生成一个名为test的可执行文件。

警告:

   

2.编译

  在日常交流中通常使用“编译”统称这4个步骤,实际上分为四个步骤:一个C/C++文件要经过预处理(preprocessing)编译(compilation)汇编(assembly)链接(linking)等4步才能变成可执行文件。

  预处理(preprocessing):C/C++源文件中,以“#”开头的命令被称为预处理命令,如包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”、“#ifdef”等。预处理就是将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些东西输出到一个“.i”文件中等待进一步处理

  编译(compilation):编译就是把C/C++代码(比如上述的“.i”文件)“翻译”成汇编代码,所用到的工具为cc1(它的名字就是cc1,x86有自己的cc1命令,ARM板也有自己的cc1命令),生成.s文件

  汇编(assembly):汇编就是将第二步输出的汇编代码翻译成符合一定格式的机器代码,在Linux系统上一般表现为ELF目标文件(OBJ文件),用到的工具为as。x86有自己的as命令,ARM版也有自己的as命令,也可能是xxxx-as(比如arm-linux-as),最后生成.o文件

  反汇编:是指将机器代码转换为汇编代码,这在调试程序时常常用到。

  链接(linking):链接就是将上步生成的OBJ文件和系统库的OBJ文件、库文件链接起来,最终生成了可以在特定平台运行的可执行文件,用到的工具为ld或collect2,最后生成可执行程。

猜你喜欢

转载自www.cnblogs.com/zhuangquan/p/11757674.html
今日推荐