Linux-预处理-编译-汇编-链接过程

编译器

  Linux环境下gcc用来编译c语言,g++用来编译c语言或者c++

  1. 程序的编译过程
    预处理-编译-汇编-链接

预处理

  1. 宏替换
  2. 头文件展开
  3. 去注释

  对于gcc/g++需要添加-E命令行参数,生成的文件对应后缀为“.i”。
在这里插入图片描述
命令: gcc -E test.c -o test.i
在这里插入图片描述
  告诉gcc或者g++,在编译过程中,完成预处理之后就停下来。

编译

  语法语义的检测,并生成汇编代码-s,完成编译停止生成一个.s文件。
在这里插入图片描述
命令: gcc -s test.c -o test.s
在这里插入图片描述

汇编

  汇编生成机器代码,-c 完成汇编停止生成.o文件
在这里插入图片描述

命令: gcc -c test.c -o test.o
在这里插入图片描述
  .o文件对标到Windows当中就是目标程序(xxx.obj)

链接

  将多个目标和库链接在一起,生成可执行程序
命令: gcc test.o -o text1
在这里插入图片描述
  或者直接编译
命令: gcc text.c -o text2

链接方式

链接方式: gcc默认链接方式为动态链接
动态链接: 链接动态库,将库中的函数符号信息表记录到可执行程序中,并没有把函数实现写入程序,程序文件比较小,并且运行时在内存中多个程序可以使用同一个动态库,降低内存中的代码冗余。当时运行时需要依赖动态库的存在,加载动态库到内存。
静态链接: 链接静态库,将库中使用的函数实现写入可执行程序文件,程序文件比较大。有可能会造成内存中代码冗余,但是运行不需要依赖。

猜你喜欢

转载自blog.csdn.net/weixin_43580319/article/details/113913597