C语言-用gcc指令体验C语言编译过程

GCC命令与参数详解 使用 GCC 需要对编译的四个阶段(编译过程),以及编译的规则有一定的了解,熟悉使用 GCC 对于编写 Makefile 具有决定性的作用。GCC 的命令使用非常灵活,命令都以 gcc 开头然后配合待编译文件名,编译选项即可(可以说 GCC 就只有一条命令,只是编译选项较多而已)。命令选项可以随意组合,只需要注意选项是否包含参数即可,如果选项包含参数则参数需要紧紧跟随在选项后方。 阅读详情

1 环境说明

  • 系统:Windows
  • 编译器:gcc
  • 命令行工具:cmder (用系统自带的命令行工具也可以)

2 gcc编译步骤

#步骤名生成文件功能
1编辑(Edit)test.c进行编码工作
2预处理(Pre-processing)test.i将#include头文件以及宏定义替换成其真正的内容
3编译(Compiling)test.s将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程
4汇编处理(Assembling)test.o将上一步的汇编代码转换成机器码(machine code),生成目标文件
5链接(Linking)test.exe将多个目标文以及所需的库文件链接成最终的可执行文件(executable file)

在这里插入图片描述

2.1 编辑

编写以下代码,命名文件名为test.c:

#include<stdio.h>

int main() {
    printf("Hello World!");
    return 0;
}

2.2 预处理

预处理gcc指令如下:

gcc -E test.c -o test.i
  • 参数-E - 执行编译预处理
  • 参数-o - 指明输出文件的文件名

执行过后控制台没有任何输出,打开文件夹会发现生成了一个test.i文件
在这里插入图片描述
可以发现生成的test.i文件会比test.c文件大得多,因为进行了大量的替换,test.i文件可以通过记事本方式打开的,也可以输入指令type test.i在控制台查看,由于文件内容很多,下面仅展示最后部分,可以发现末尾部分还是我们编写的源代码,而头文件#include<stdio.h>进行了全部替换
在这里插入图片描述

2.3 编译

编译gcc指令如下:

gcc -S test.i -o test.s
  • 参数-S - 编译指令
  • 参数-o - 指明输出文件的文件名

执行过后控制台没有任何输出,打开文件夹会发现生成了一个test.s文件
在这里插入图片描述
我们这里用指令type test.s在控制台查看文件内容,可以发现程序被转换成了汇编代码

        .file   "test.c"
        .def    __main; .scl    2;      .type   32;     .endef
        .section .rdata,"dr"
.LC0:
        .ascii "Hello World!\0"
        .text
        .globl  main
        .def    main;   .scl    2;      .type   32;     .endef
        .seh_proc       main
main:
        pushq   %rbp
        .seh_pushreg    %rbp
        movq    %rsp, %rbp
        .seh_setframe   %rbp, 0
        subq    $32, %rsp
        .seh_stackalloc 32
        .seh_endprologue
        call    __main
        leaq    .LC0(%rip), %rcx
        call    printf
        movl    $0, %eax
        addq    $32, %rsp
        popq    %rbp
        ret
        .seh_endproc
        .ident  "GCC: (tdm64-1) 4.9.2"
        .def    printf; .scl    2;      .type   32;     .endef

2.4 汇编处理

汇编处理gcc指令如下:

gcc -c test.s -o test.o
  • 参数-c - 汇编转机器码
  • 参数-o - 指明输出文件的文件名

执行过后控制台没有任何输出,打开文件夹会发现生成了一个test.o文件
在这里插入图片描述
由于文件已经是机器码了,打开文件的话显然都是乱码了,用指令type test.o在控制台查看文件内容如下:
在这里插入图片描述

2.5 链接

链接处理gcc指令如下:

gcc test.o -o test
  • 参数-o - 指明输出文件的文件名

执行过后控制台没有任何输出,打开文件夹会发现生成了一个test.exe文件

在这里插入图片描述
既然已经转换成了.exe可执行文件,在Windows操作系统下可以直接执行,直接在控制台输入test,执行结果如下:
在这里插入图片描述
可以发现最后输出了Hello World!那么整个过程就结束了

3 一步到位的方法

直接可以从.c文件到.exe可执行文件,这里就不演示了

gcc test.c -o test
Linux 的GCC的编译过程及方式 Linux下GCC越详细越好的啦 阅读详情

相关推荐

gcc编译过程

一、总体概述 GCC的编译流程分为四个步骤: 1、预处理(Pre-Processing) 2、编译(Compiling) 3、汇编 (Assembliang) 4、链接(Linking) 二、解释步骤 XXX为源文件 YY为生成的文件 1、预处理(Pre-Processing) 预处理用于将所有的#include头文件以及宏定义替换成其真正的内容,预处理之后得到的仍然是文本文件,但文件体积会大很多。 将 .c 文件转换为 .i 文件,使用gcc命令:gcc -E XXX -o YY 对应于预处理命令 cpp

qq_59028382的博客 5404

Linux——gcc -c -o 等参数的解释

当我们写好了C语言的代码之后,下一步就是gcc编译运行,这里对gcc代码的部分参数加以解释。 一个程序最终是为了生成一个可执行文件。 完整的流程:源程序,预处理,编译生成汇编,可执行文件 ——————.c————.i—————.s————(自动执行) 示例: 一、不使用参数,直接gcc 通过gcc 不加参数可以一步直接编译生成可执行文件. gcc main.c _这里自动生成的是可执行文件默认为a.out,当然可以通过-o选项更改生成文件的名字,比如将生成的可执行文件命名为HelloWord;Hell.

Wyatt_zhai 1万+

【C语言】GCC编译过程详述

​虽然我们称GCC是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。本文将详细解释其编译的指令格式,参数选项。

gongdiwudu的专栏 7132

GCC-C代码编译过程

GCC即GNU Compiler Collection,即 GNU 编译器套件。 GCC 编译器支持编译多种程序语言的编译。 无论是 C 还是 C++ 程序,其从源代码转变为可执行代码的过程,具体可分为 4 个过程,分别为预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。默认情况下,gcc 指令会一气呵成,直接将源代码历经这 4 个过程转变为可执行代码,且不会保留各个阶段产生的中间文件。 而如果想查看这 4 个阶段各自产生的中间文件,最简

weixin_48120109的博客 6146

C 语言编程 — GCC 编译器

目录 文章目录目录GCC 编译器GCC 的常用指令选项GCC 所遵循的部分约定规则GCC 的编译流程GCC 的编译流程示例 GCC 编译器 GCC(GNU Compiler Collection,GNU 编译器套件)是 Linux 下使用最广泛的 C/C++ 编译器。GCC 是以 GPL 许可证所发行的自由软件,也是 GNU 计划的关键部分。GCC 的初衷是为 GNU 操作系统专门编写一款编译器,...

烟云的计算 4743

泛微E9与金蝶云星空单点登录集成实战指南

本文详细介绍了泛微E9与金蝶云星空单点登录(SSO)集成的实战指南,包括前期准备、核心代码实现、常见问题排查及安全加固建议。通过集成,企业可实现一次登录全网通行,显著提升工作效率和安全性。文章特别强调了签名生成机制和跳转URL构造的关键技巧,帮助开发者避免常见错误。

weixin_30689307的博客 534

GCC编译器-c编译指令解析

非常常见的场景是,有的项目需要用到链接库,可能是静态链接库或动态链接库,而链接库生成时,就需要将源代码编译到目标文件阶段,然后将目标文件打包为链接库,这样其他程序就可以使用该库文件提供的函数或符号。这里的原因比较复杂,起初我认为是程序中使用了printf函数,因此去掉了printf函数,只是return 0,但这样产生的main.o文件依旧无法执行。crt1.o、crti.o、crtbegin.o、crtend.o、crtn.o是gcc加入的系统标准启动文件,对于一般应用程序,这些启动是必需的。

想要和得到之间还有一步,就是要做到 1981

WRF-Chem新手避坑指南:从chem_opt到emiss_opt,那些手册里没明说的参数配置实战

本文为WRF-Chem新手提供从chem_opt到emiss_opt的参数配置实战指南,解析官方文档中未明确的常见陷阱与解决方案。通过华北重霾案例,详细讲解化学机制选择、排放源配置及特殊参数组合的注意事项,帮助用户避开常见错误,提升模拟效率。

weixin_30897079的博客 279

学习笔记:gcc常用选项

GCC简介 GCC 的意思也只是 GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言;它现在还支持 Ada 语言、C++ 语言、Java 语言、Objective C 语言、Pascal 语言、COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等。而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 GNU Compiler Collection 也即是 GNU 编译器家族的意思了。另一方面,说到 GCC 对于操作系统平台及硬件

cainiaocl的博客 1570

手把手教你逆向抖店滑块验证码:从抓包到生成captchaBody的完整流程(附Python复现代码)

本文详细解析了抖店滑块验证码的逆向过程,从抓包分析到参数生成,最终用Python完整复现验证流程。涵盖关键接口分析、指纹参数生成、轨迹加密逻辑及核心加密算法实现,帮助开发者突破抖店的多重安全机制,实现高效的人机验证绕过。

weixin_30681121的博客 424

Python-OPCUA 实现西门子PLC数据批量读写与自动化监控

本文详细介绍了如何使用Python结合OPC UA协议,实现对西门子PLC数据的批量读写与自动化监控。通过搭建开发环境、利用KEPserverEX作为通信桥梁,并配合Python代码实战,读者可以掌握高效的数据采集、批量写入以及构建带报警功能的监控系统的方法,从而大幅提升工业自动化场景下的数据处理效率和系统灵活性。

www00的博客 181

gcc的编译C语言的过程

GCC(GNU Compiler Collection)是由GNU项目开发和维护的一套开源编程语言编译器集合。它支持多种编程语言,包括但不限于C、C++、Objective-C、Fortran、Ada等。GCC被广泛应用于编译和优化各种程序,是许多开发者和组织的首选工具之一。gcc默认编译C语言。

qq_55610255的博客 2458

Unity2019编译器下使用Ump无错误,打包exe不播放 或 将exe文件在其他电脑下运行不播放

一、unity编译器下使用UMP可以播放视频,打包后查看debug 出现错误 UnloadTime: 1.070900 ms Fallback handler could not load library F:/PCTest/AccessControlSysteam/jfmx_Data/Mono/libdl Fallback handler could not load library F:/PCTest/AccessControlSysteam/jfmx_Data/Mono/libdl.dll Fa.

qq_42345116的博客 4700

C语言编译过程

1、C语言编译过程 2、单c文件编译实践 3、多c文件编译实践 4、define 5、选择性编译ifdef、ifndef、if 6、静态库和动态链接库

michael_linux的博客,一个小小小学生。滴水穿石,步步为营,只为那刹那芳华。 7429

SerDes系列之如何选择AC耦合电容

交流耦合电容用于隔离PCB互连时的直流分量(Common-mode voltage),同时传递交流分量(Voltage swing),其作用类似于一个高通滤波器,但是,如果电容容值选取不当,使用过程中会产生信号质量问题,典型的应用场景:当包含相同的长串1或0的NRZ数据应用于该高通滤波器时,会发生低频电压跌落,导致低频模式相关抖动(PDJ)。

一只豌豆象的博客 2351

【AUTOSAR-DEM】-2.1-APP SWC设置UDS/OBD DTC检出和恢复

点击返回「《Autosar_BSW高阶配置》总目录」 案例背景(共6页精讲): DEM模块提供两种不同类型的Event: • BSW-related events:DEM_EVENT_KIND_BSW(通过C-API报告 - Dem_SetEventStatus) • SW-C-related events:DEM_EVENT_KIND_SWC(通过RTE operation - SetEventStatus) 下面我们讲讲在APP SWC中设置BusOff(总线关闭) DTC故障成立/恢复(其它

「汽车电子助手」的博客 3944

gcc编译C语言文件过程

gcc

qq_73326524的博客 6694

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

weixin_42412049的博客 2297

C语言学习之gcc编译四步

gcc是一个开源的C语言编译器,它将C语言源代码编译成目标代码。gcc编译器通常分为四个步骤,即预处理、编译、汇编和链接。下面在本文中介绍在linux下gcc编译四步的过程。

weixin_43672168的博客 9397

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

gcc的编译过程

gcc编译过程详细了解细节

DRAXY的博客 1万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

gcc编译的过程

GCC 仅仅是一个编译器,没有界面,必须在命令行模式下使用。通过 gcc 命令就可以将源文件编译成可执行文件。一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)等4步才能变成可执行文件,通常使用“编译”统称这4个步骤。

明天你好的博客 6721

gcc -c -o编译过程

gcc编译分步处理一、预处理二、编译三、汇编四、链接一步到位多模块编译一次性编译:独立编译: C源文件到可执行文件共经历了4个过程。在使用GCC编译程序时,编译过程可以被细分为四个阶段,包括预处理、编译、汇编、链接。 分步处理 一、预处理 在预处理阶段,编译器主要作加载头文件、宏替换、条件编译的作用。一般处理带“#”的语句。 我们可以通过gcc -E 选项进行查看,如下所示: gcc -E m...

疯狂老司机的博客 1万+

【嵌入式C语言】GCC概述+C语言编译过程

GCC概述+C语言编译过程

weixin_63135906的博客 1019

C语言编译器之一,GCC编译器

C语言作为高级语言,用其编写的程序指令机器并不能识别,因此需要有一个编译器将其转换为机器可识别的二进制指令。C语言已经出现50多年的时间,其相关的编译器种类众多,从最早先的turbo c系列编译器,到大名鼎鼎的gcc,还有基于LLVM的clang,各有优劣,而且在多个平台(如windows、Linux、MAC)上都广泛使用。同时由于Windows的强势存在,其自家的Visual C/C++编译器也有不少的应用。 一般C语言程序是在PC上编写,并将其编译成可执行文件,最终放到电脑或设备上去执行。

goodshanzi的博客 7054

【C语言】(24)编译过程

在C语言编译过程中,源代码通过一系列的步骤转换成可执行程序。这个过程包括预编译、编译、汇编和链接等阶段,每个阶段的作用和具体操作如下:下面使用的gcc是linux系统的编译器,如果要windows要跟着操作可以考虑安装一个虚拟机或者winGW或者是WSL。

游码客的博客 2140

GCC编译C语言程序的过程

gcc/g++编译流程四步骤 1.预处理,生成预编译文件(.i文件): gcc –E hello.c –o hello.i 2.编译,生成汇编代码(.s文件): gcc –S hello.i –o hello.s 3.汇编,生成目标文件(.o文件): gcc –c hello.s –o hello.o 4.链接,生成可执行文件: gcc hello.o –o hello //hello即为可...

mayue_web的博客 3057
上一篇: C语言-宏定义#define的用法
下一篇: 操作系统原理第一章:操作系统概述
syzdev
博客等级 码龄9年 852粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值