GCC执行过程简介

Linux下gcc编译c程序生成可执行文件的过程 Linux下gcc编译c文件生成可执行文件 一、准备 hello.c 文件 1、在当前目录下新建c文件 $:vim hello.c 2、按i进入编辑模式。按esc退出编辑模式,输入源代码 #include <stdio.h> int main(void) { printf("hello world"); return 0; } 退出编辑模式,按住shift+两次z 阅读详情

1、简介

       虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。
       命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的二进制目标文件。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。


2、执行过程示例

    示例代码 a.c:
    #include <stdio.h>
    int main()
    {
        printf("hello\n");
    }


    预编译过程:
    这个过程处理宏定义和include,并做语法检查。
    可以看到预编译后,代码从5行扩展到了910行。
    gcc -E a.c -o a.i
    cat a.c | wc -l
    5
    cat a.i | wc -l
    910


    编译过程:
    这个阶段,生成汇编代码。
    gcc -S a.i -o a.s
    cat a.s | wc -l
    59


    汇编过程:
    这个阶段,生成目标代码。
    此过程生成ELF格式的目标代码。
    gcc -c a.s -o a.o
    file a.o
    a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped


    链接过程:
    链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。
    gcc a.o -o a


    程序运行:

    ./a
    hello


节摘自百度百科

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

GCC的工作过程

GCC或者G++由源文件生成可执行文件的过程,可以分为4个阶段:预处理,编译,汇编,连接。 在功能上,预处理,编译,汇编是三个不同的阶段,但是GCC实际操作上把它合并为一个步骤来执行。下面来说明: (1)预处理阶段     这个阶段主要是处理源文件中的#ifdef,#include,#define等命令。该阶段会生成一个中间文件*.i,我们    

渡辺麻友 953

商城系统全链路压测实战指南

全链路压测是模拟真实用户行为和生产环境流量,验证整个系统在高压下的稳定性和性能表现的关键手段。

monk all the way 1228

GCC简介

这也符合一般系统开发的规律:提供一个最基本的系统 (Linux内核),再提供一个扩展其功能的工具(GCC),借助于GCC编译的各种软件来丰富系统的功能。但随着GCC功能的不断扩充,现在其已经可以编译C++、Fortran、Pascal、Objective-C、Java,以及Ada等许多种类的语言了。这是最为关键的步骤,在该阶段,ld 会将各程序的执行代码放置在程序的适合位置,同时,程序调用的库函数也会以适当的方法设置调用接口。●编译是调用cc来实现的,它是源文件变为后缀为.o的目标文件的过程。

LRJ的博客 711

Jetson Nano官方镜像下载&烧录

在NVIDIA Jetson Nano开发者套件上安装NVIDIA官方Ubuntu镜像

weixin_44222088的博客 8843

openEuler Embedded新增软件包及在线安装软件方法

openEuler Embedded是基于Yocto构建的嵌入式操作系统,默认不包含dnf/apt软件包管理器,主要使用rpm格式。新增软件需通过manifest文件检查是否集成,未集成则需适配新配方。对于在线安装需求,可采用轻量级容器方案:通过isulad运行openEuler服务器版容器镜像,在容器内使用dnf命令安装软件(如Nginx),实现服务器生态兼容。部署前提包括设备支持、存储空间(≥10GB)和网络连接,需先安装并启动isulad服务。这种方法结合了嵌入式系统的轻量化特性和服务器系统的软件管理

专注嵌入式开发与 Linux 系统应用实战,分享芯片驱动、设备调试、系统工具开发干货。 1225

gcc工作流程讲解

linux系统中的源文件经过gcc编译器的四个步骤处理,能够生成一个可执行的程序: 当然gcc编译器不能独立完成这四个步骤,而是在内部调用了其他工具,从而完成了整个工作流程。在这其中,编译是最耗时的,因为要逐行检查语法。 那现在通过Linux中的一个cpp文件来了解其中的编译过程。 在linux创建一个test.cpp文件 1.预处理阶段: 这个阶段会将文件中的头文件展开,宏替换掉,注释去掉,经过(cpp预处理器)预处理后的cpp文件变为一个i文件。 gcc -E test.cp.

qq_56615615的博客 1233

高通拨号流程介绍

本文介绍了高通平台(如SDX55)中APSS(A7处理器)与ModEM(Q6处理器)间的通信机制。

四儿家的小祖宗的博客 1067

gcc执行的过程

市井之徒——徒劳往返——返老还童——童牛角马——马首是瞻——瞻前顾后——后顾之忧——忧国奉公——公子王孙——孙康映雪 gcc是我们Linux下编译C文件的重要工具,在用gcc对源文件进行处理时,我们知道要经历以下几个过程:预处理——编译——汇编——链接通常将前面三步统称为编译预处理执行所有的预处理命令,所有以”#”开头的指令为预处理指令,在进行预处理时,系统将我们的源文件转化成C的语法,将头文件中的

Peter_tang6的博客 3042

Qt for WebAssembly环境搭建

一、前言 二、Ubuntu 1、在线安装Qt15 在线安装下载器:https://download.qt.io/official_releases/online_installers/ 安装时记得勾选WebAssembly,如下: 2、安装依赖 # Install Python sudo apt-get install python2.7 # Install CMake (optional, only needed for tests and building Binaryen) sudo apt

贝勒里恩的博客 3667

机器学习扩散模型简介

​ 扩散模型是生成模型,在过去几年中越来越受欢迎,这是有充分理由的。仅在 2020 年代发布的几篇开创性论文就向世界展示了 Diffusion 模型的能力,例如在图像合成方面击败 GAN[6]。最近,从业者将看到DALL-E 2(OpenAI 上个月发布的图像生成模型)中使用的扩散模型。

gongdiwudu的专栏 4258

在Linux系统(Ubuntu)下认识Gcc编译器的使用

目录 一、Gcc编译器 (一)、Gcc简介 (二)、Gcc编译语言:C 运行库 (三)、Gcc相关命令说明:Binutils 二、使用Gcc编译实例1 (一)、程序编写 (二)、使用Gcc编译 (三)、对ELF 文件进行分析 三、使用Gcc编译实例2 (一)、程序编写 (二)、程序编译 (三)、多个程序文件的编译 (四)、纠错 (五)、库文件链接 四、实验总结 五、参考文献 一、Gcc编译器 (一)、Gcc简介 GCC(GNU C Compiler)是编译工具..

qq_48273416的博客 2361

GCC 简介

GCC(GNU Compiler Collection)是一套由 GNU 开发的编程语言编译器,它支持多种编程语言,包括 C、C++、Objective-C、Fortran、Ada 和 Go 等。GCC 是一个开源的工具集,可在多个平台上运行,支持多种操作系统和架构。它是许多操作系统的默认编译器,也是许多开源项目的首选编译工具。GCC 的编译过程可以分为四个主要阶段:预处理(Preprocessing)、编译(Compilation)、汇编(Assembling)和链接(Linking)。

陈辰学长的博客 2333

【RT-DETR有效改进】轻量级网络ShuffleNetV2(附代码+修改教程)

从今天开始正式开始更新RT-DETR剑指论文专栏,本专栏的内容会迅速铺开,在短期呢大量更新,价格也会乘阶梯性上涨,所以想要和我一起学习RT-DETR改进,可以在前期直接关注,本文专栏旨在打造全网最好的RT-DETR专栏为想要发论文的家进行服务。RT-DETR剑指论文专栏,持续复现各种顶会内容——论文收割机RT-DETR​​。

Snu77的博客 1992

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

GCC编译过程简介

GCC(GNU Compiler Collection)是一个非常流行的编译器集合,广泛用于C、C++、Fortran、Ada、Go等语言的编译。GCC的编译过程包括多个阶段,每个阶段都有特定的功能,确保源代码最终转换成可执行的二进制文件。

m0_56508437的博客 1046

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

gcc编译的过程

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

明天你好的博客 6721

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

GCC编译过程

目录 GCC编译 方式一:一步完成 方式二:分步编译 一、预处理 二、编译 三、汇编(生成目标文件) 四、链接 gcc安装查看 方式一: 方式二: 快速安装gcc编译器 gcc 和 g++ 的区别 Linux执行文件 GCC编译 方式一:一步完成 打开命令行窗口(Terminal),编写如下 gcc 指令: gcc hello.c 按下 Enter 回车键,由此 GCC 编译器就帮我们在当前目录下生成了对应的可执行文件,该文件的名称为 a.out,可以通过 l..

weixin_38383877的博客 3071

gcc简介

编译器根据其对程序的了解进行优化。gcc提供的代码优化功能非常强大,它通过参数-On来控制优化代码的生成,其中n为优化级别的整数,比较典型的范围是从0变化到2或3(与版本有关)。,会加深elf文件的理解,但要深刻理解这些结构化的文件,以及计算机程序的执行过程,需要了解加载器、链接器等操作系统提供的程序,这些结构化的文件可以粗糙地理解为上述程序之间的协议。2000年:GCC 3.0发布,引入了全新的C++编译器前端(g++),它提供了对C++标准的更好支持,并且是第一个能够完全支持ISO C99标准的版本。

jisan541的博客 2872

【Liunx】程序的执行过程及gcc/g++的理解

链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行。

luhaoran814的博客 760

GCC的学习(一)GCC简介及其常用选项

一、什么是GCC GCC(the GNU Compiler Collection)GCC是GNU编译器集合 它包括了C/C++、Objective-C、Fortran、Ada和Go语言的前端和对应的库(libstdc++)GCC初衷是为完全免费的GNU系统编写的编译器。 二、程序到计算机执行 一个C程序从编辑到执行需要经过以下过程: 编写并保存程序(.c)->预处理(.c)成文件(.i)-&...............

Fishfishfishfishcat 5780

【Linux】gcc简介+编译过程

gcc简介、编译和链接过程、编译步骤生成的原因、编译器自举的概念、链接的分类:静态链接与动态链接...

BinaryWiker的博客 2020

gcc编译过程简介

fill:#333;color:#333;color:#333;fill:none;

czw 981

gcc的编译C语言的过程

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

qq_55610255的博客 2458
上一篇: GCC Command Options
下一篇: 该死的c语言的隐式函数声明法则
nodeathphoenix
博客等级 码龄16年 97粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值