【Linux】Linux编译器-gcc/g++使用

2022-11-15 15:47:12 浏览数 (2)

文章目录
  • 一、知识铺垫
    • 1.预处理
    • 2.编译
    • 3.汇编
    • 4.链接
  • 二、函数库
    • 1.动态库
    • 2.静态库
  • 三、g 的基本使用
  • 四、总结

一、知识铺垫

重新简单回顾一下编译链接的过程

1.预处理

预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。 选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序

头文件展开,去注释,宏替换,条件编译

代码语言:javascript复制
gcc -E test.c -o test.i

-E:从现在开始,进行程序的翻译,当你将预处理做完,就停下来

-o:指明形成的临时文件名称(.i)

  • 头文件的展开

此时生成test.i,我们用vim进入test.i,在利用底行模式vs test.c:

同时,在预处理阶段完成了宏替换、去注释以及条件编译:

  • 条件编译的生效(宏的命令行定义)

可以向编译器传参来保证宏在命令行中定义

2.编译

在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码

把C转换成汇编

代码语言:javascript复制
gcc -S test.i -o test.s

S:从现在开始,进行程序的翻译,做完编译工作,变成汇编之后,就停下来

用vim打开test.s我们就可以看到汇编代码了:

3.汇编

把汇编变成二进制(不是可执行,二进制目标文件)

代码语言:javascript复制
gcc -c test.s -o test.o

c:从现在开始,进程程序的翻译,做完汇编工作,变成可重定向目标二进制,就停下来

然后我们用vim打开test.o,但是我们根本看不懂:

在输入指令od test.o:

注意:前面三个只在翻译代码

其实这三步也就相当于键盘的左上角ESc

0 人点赞