• 649查看
  • 0回复

[应用层软件] gcc编译过程介绍

[复制链接]


该用户从未签到

发表于 10-12-2023 08:43:06 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


1. gcc编译器的安装

工作中,在Linux环境下,有过量产项目的公司,gcc一般都是已经安装好了的。如果需要安装,请从官网下载或网上找资源下载

gcc官网:https://gcc.gnu.org/

gcc编译过程介绍w1.jpg

此处不赘述安装过程了

查看是否安装成功:gcc -v 能查到gcc版本号,说明安装成功

gcc编译过程介绍w2.jpg

2. 编译过程介绍:

最开始学习编程的时候,一般都是用IDE去编译的,不管是IDE还是gcc编译的时候都会有四个过程

一个编译过程一般要经过四个过程:

预处理------编译------汇编------链接

gcc编译过程介绍w3.jpg

预处理:展开头文件/宏替换/去掉注释/条件编译

编译:检查语法,生成汇编代码

汇编:汇编代码转换机器码,但还不可执行

链接:将要用到的库链接到一起生成可执行程序

gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段将预处理得到的源代码文件,进行“翻译转换”,产生出机器语言的目标程序,得到机器语言的汇编文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是链接。在链接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的库中链到合适的地方。

3. gcc的使用:

3.1 简单使用

命令格式:gcc [选项] [文件名]

以编译单个文件为例,最简单的使用方法:

gcc test.c //默认生成可执行文件的名字为a.out

gcc编译过程介绍w4.jpg

指定可执行文件的名字:gcc –o test test.c //指定生成可执行文件的名字为test

3.2 gcc编译经历的四个过程:

(1)预处理:gcc -E test.c -o test.i//生成预编译文件

(2)编译:gcc -S test.i -o test.s//生成汇编代码

(3)汇编:gcc -c test.s -o test.o (或as test.s -o test.o ) //生成目标文件

(4)链接:gcc -o test test.o//链接,生成可执行文件

3.3 gcc常用选项
选项        含义
-E只预编译,不做任何处理
-c只编译不链接,生成目标文件”.o”
-S只编译不会汇编,生成汇编代码”.s”
-g        在执行过程中包含标准调试信息
-o file指定将file文件作为输出文件
-v打印出编译器内部编译各过程的命令行信息和编译器的版本
-I dir在头文件的搜索路径列表中添加dir目录


3.4 gcc支持的后缀名
后缀名        所对应的语言
.c        C原始程序
.C/.cc/.cxx        C++原始程序
.m        Objective.c原始程序
.i        已经预处理的C原始程序
.ii        已经预处理的C++原始程序
.s/.S        汇编语言原始程序
.h        预处理文件(头文件)
.o        目标文件

4. 静态库和动态库

链接可分为动态链接和静态链接:

静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为 “.a”。

动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”。

gcc在编译时默认使用动态库链接,加上-static 参数则采用静态链接。

gcc test.o -static -o test_static

可看出链接静态库和动态库,最终生成的可执行文件大小相差很多

动态库链接,加上-static 参数则采用静态链接。

gcc test.o -static -o test_static

可看出链接静态库和动态库,最终生成的可执行文件大小相差很多

gcc编译过程介绍w5.jpg


该用户从未签到

发表于 17-3-2025 00:12:04 | 显示全部楼层
作为一名汽车工程师,我深知在Linux环境下使用gcc编译器的重要性。在此介绍gcc编译过程及安装方法。一般来说,公司量产项目环境下,gcc已经预先安装好了。如需安装,建议访问官网或寻找其他资源下载。查看安装是否成功可通过命令gcc -v查看版本号。关于编译过程,它包含预处理、编译、汇编和链接四个步骤。预处理阶段主要展开头文件,将宏替换为实际值等。后续步骤将源代码转化为可执行文件。掌握这些基础知识对于高效编程至关重要。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 17-3-2025 00:12:04 | 显示全部楼层
好的,下面是我作为汽车工程师对gcc编译过程的介绍:

一、gcc编译器的安装

在Linux环境下,大部分公司为了开发环境的需求,通常已经预装了gcc编译器。若需安装,建议访问gcc官网下载或从其他可靠资源获取安装包。安装完成后,通过输入命令“gcc -v”查看版本号,以确认安装成功。

二、编译过程介绍

编译过程包括四个主要阶段:预处理、编译、汇编和链接。

预处理阶段主要处理源代码中的宏定义和头文件包含等。在这一阶段,编译器会将头文件中定义的代码展开,并处理预处理器指令如#define等。这一阶段的主要输出是预处理后的源代码。

后续阶段包括编译、汇编和链接,这些阶段的工作是将预处理后的源代码转换为可执行程序。具体的细节涉及到语法分析、生成目标文件、指令转换和符号解析等步骤。这些阶段协同工作,最终生成可在目标系统上运行的可执行文件。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 17-3-2025 00:12:04 | 显示全部楼层
好的,下面是我作为汽车工程师对gcc编译过程的介绍:

一、gcc编译器的安装

在Linux环境下,对于进行过量产项目开发的系统,gcc通常已经预先安装。若需安装,建议从官网下载或搜索其他可靠资源。安装成功后,通过命令“gcc -v”查看版本号以确认安装。

二、编译过程介绍

编译过程包括四个主要阶段:预处理、编译、汇编和链接。

1. 预处理:此阶段主要展开头文件,处理以“#”开头的预处理器命令等。预处理器输出将作为编译器阶段的输入。
2. 编译:编译器将预处理后的文件转化为汇编语言。
3. 汇编:将汇编代码转化为机器语言,并创建目标文件。
4. 链接:链接器负责将多个目标文件以及所需的库文件连接在一起,生成最终的可执行文件。

这四个阶段共同完成了从源代码到可执行程序的转化。希望以上内容对你有所帮助。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 17-3-2025 00:12:04 | 显示全部楼层
好的,下面是我作为汽车工程师对gcc编译过程的介绍:

一、gcc编译器的安装

在Linux环境下,大部分公司为了开发环境的需求,通常已经预装了gcc编译器。若需安装,建议访问gcc官网下载或从其他可靠资源获取安装包。安装完成后,通过输入命令“gcc -v”查看是否成功安装,如果能查询到版本号,即表示安装成功。

二、编译过程介绍

编译过程通常包含四个主要阶段:预处理、编译、汇编和链接。

1. 预处理:此阶段主要展开头文件(如以“.h”为后缀的文件),处理条件编译指令和其他预处理器指令。预处理后的文件通常会有“.i”或“.ii”的后缀。
2. 编译:编译器将预处理后的文件转化为汇编语言。此阶段的输出是汇编代码文件,通常以“.s”为后缀。
3. 汇编:汇编器将汇编代码转化为机器语言,生成目标文件,通常以“.o”为后缀。
4. 链接:链接器负责将多个目标文件以及所需的库文件连接在一起,生成最终的可执行文件。这一阶段会解决在代码中引用的外部函数和变量的地址问题。

这四个阶段共同完成了从源代码到可执行文件的转化过程。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 11:02 , Processed in 0.367248 second(s), 37 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.