一、安装gcc编译器

通过命令gcc -v查看当前的GCC版本:

gcc -v

如下所示:
在这里插入图片描述
当出现如下问题:
Command ‘gcc’ not found, but can be installed with:sudo apt install gcc

解决办法:通过 sudo apt install gcc 安装gcc编译器


二、关于gcc编译器

  1. gcc是一个强大的工具集合,它包含了预处理器、编译器、汇编器、链接器等组件。它会在需要的时候调用其他组件。
  2. 输入文件的类型和传递给gcc的参数决定了gcc调用具体的哪些组件
  3. 对于开发者,它提供的足够多的参数,可以让开发者全面控制代码的生成,这对嵌入式系统级的软件开发非常重要。

I、使用方法

gcc [选项] 文件名

II、常用选项

选项含义
-v查看gcc编译器的版本,显示gcc执行时的详细过程
-o [filename]指定输出文件名为file
-E只预处理,不会编译、汇编、链接
-S只编译,不会汇编、链接
-c编译和汇编,不会链接

在vi/vim编辑器下编辑.c源文件

//testGcc.c
#include<stdio.h>

int main()
{
	int i,j;
	i = 0;
	j = 0;
	i = j+1;
	printf("Hello World!\n");
	printf("i=j+1%d\n",i);
	return 0;
}

编译和运行:

gcc -o testGcc testGcc.c  一次编译(忽略中间过程)
./testGcc  运行

在这里插入图片描述

三、gcc编译C/C++的过程

一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)、和连接(linking)才能变成可执行文件。

hello.c → hello.i → hello.s → hello.o → hello

一、预处理

  预处理就是将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些代码输出到一个“.i”文件中等待进一步处理。
  使用 -E 参数输出文件的后缀名为:".cpp"

gcc -E -o testGcc.cpp testGcc.c   (预编译)

  使用wc命令比较预处理后的文件与源文件,对比两个文件的差异

wc testGcc.c testGcc.cpp

可以看到预处理之后的文件相比源文件变大了很多。

在这里插入图片描述

二、编译成汇编代码

预处理文件 → 汇编代码

gcc -x cpp-output -S -o testGcc.s testGcc.cpp

直接编译到汇编代码:gcc -S hello.c
在这里插入图片描述

三、汇编成目标代码

汇编代码 → 目标代码

gcc -x assembler -c testGcc.s

使用汇编器生成目标代码:

as -o testGcc.o testGcc.s

直接编译成目标代码:gcc -c testGcc.c
  汇编就是将第二步输出的汇编代码翻译成符合一定格式的机器代码,在Linux系统上一般表现位ELF目标文件(OBJ文件)。

四、链接

目标代码 → 执行代码

gcc -o testGcc testGcc.o

直接生成执行代码:gcc -o testGcc testGcc.c
  链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序。

注:汇编代码和执行代码都属于二进制代码


gcc 的高级选项:-Wall 打开所有的警告信息

gcc -Wall -o testGcc testGcc.c
Logo

更多推荐