欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux系统下通过GCC编译C/C++程序

程序员文章站 2022-06-04 12:38:43
...

一、安装gcc编译器

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

gcc -v

如下所示:
linux系统下通过GCC编译C/C++程序
当出现如下问题:
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  运行

linux系统下通过GCC编译C/C++程序

三、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

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

linux系统下通过GCC编译C/C++程序

二、编译成汇编代码

预处理文件 → 汇编代码

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

直接编译到汇编代码:gcc -S hello.c
linux系统下通过GCC编译C/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
相关标签: 操作系统