首页 > 其他分享 >gcc的编译过程

gcc的编译过程

时间:2023-07-29 10:22:06浏览次数:32  
标签:文件 gcc macro01 xxx 编译 过程 链接

一、gcc的编译过程、

  1. 源文件 xxx.c
  2. 预处理文件 xxx.i
  3. 汇编文件 xxx.s
  4. 未链接的二进制文件 xxx.o
  5. 通过连接,产生最终可执行的二进制文件

二、编译步骤的工作

1、预处理

  • 头文件被包含进来(复制): #include
  • 宏定义会被替换:#define
  • 取消宏定义: #undef
  • 条件编译: #if #ifdef #ifndef #else #elif #endif
  • 修改行号以及文件名: #line 998 "Hello.c"

​ -------------在源文件中添加 #line 行号 “文件名.c”可以使预编译产生的文件按照对应的行号和文件名做标记

  • 清除注释

2、编译

生成汇编文件

3、汇编

生成一个ELF格式的可重定位文件,即该文件包含让处理器直接运行的指令流,但它的全局符号未定位,其所有地址都是0

4、链接

  • 重定位
  • 合并权限相同的段,可理解为将多个文件合并为一个文件

三、查看各步骤的信息

1、预处理

gcc macro01.c -o macro01.i -E

2、编译

gcc macro01.i -o macro01.s -S

3、汇编

gcc macro01.s -o macro01.o -C


查看lef文件,重定位文件,可以看到上一节图片的内容
readelf macro01.o -a

4、链接

gcc macro01.o -o macro01 -lc -lgcc
-lc:链接标准C库
-lgcc:链接gcc库

标签:文件,gcc,macro01,xxx,编译,过程,链接
From: https://www.cnblogs.com/goldenFantome/p/17589361.html

相关文章

  • apue.3e遇到的编译问题(recipe for target 'badexit2' failed)以及ls1.c案例测试
    APUE(慢慢啃这本书)编译问题,网上获得的前辈方法,本地测试可行,仅作记录。1.系统环境2.下载解压tar-zxvf*.tar.gzcd./apue.3emake报错:collect2:error:ldreturned1exitstatusMakefile:31:recipefortarget'badexit2'failedmake[1]:***[badexit2]Error1m......
  • /usr/local/arm/5.4.0/usr/bin/../libexec/gcc/arm-none-linux-gnueabi/5.4.0/cc1: er
    arm-linux-gcca.c报错/usr/local/arm/5.4.0/usr/bin/../libexec/gcc/arm-none-linux-gnueabi/5.4.0/cc1:errorwhileloadingsharedlibraries:libmpc.so.3:cannotopensharedobjectfile:Nosuchfileordirectory安装arm-linux-gcca.c没安装g++解决方法:重新安装g++......
  • Linux源码安装mysql 5.5.x (cmake编译)
    以下五个软件包是在安装mysql5.5.x之前必须安装的,不然在进行cmake时会报错。这些软件可以通过下面的链接进行源码安装,也可以通过yum安装1.安装make编译器 下载地址: http://www.gnu.org/software/make/ tarzxvfmake-3.82.tar.gzcdmake-3.82./configuremakemakeinstall2.安装b......
  • 存储过程参数操作
    SQLcode……cursorcisselectid,namefromadm_organizewherestatus=1;……forv_orgincloopselectlevel,name,idinto????fromadm_organizestartwithid=v_org.idconnectbypriorparent_id=id;--这个查询会 declar......
  • AndroidAnnotations 自定义控件 ant编译 找不到类
    问题:今天使用jenkins+ant编译android项目,一直编译不通过,报错内容就是,自定义控件找不到类。确认了几次svn提交,项目代码完全提交,所以想到是不是代码的问题。故回头查询代码。在代码中使用了下划线类。这个类是在AA中自动生成的,而报错的地方,正是编译生成的地方,觉得可能和编......
  • m基于OFDM+QPSK和turbo编译码以及MMSE信道估计的无线图像传输matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:    2.算法涉及理论知识概要       基于OFDM+QPSK和Turbo编码以及MMSE信道估计的无线图像传输是一种高效可靠的无线通信系统,广泛应用于图像传输领域。该系统利用正交频分复用(OFDM)技术,将图像数据分成多个子载波进行传输,......
  • m基于OFDM+QPSK和turbo编译码以及LS信道估计的无线图像传输matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要       正交频分复用(OFDM)技术将图像数据分成多个子载波进行传输,使用QPSK调制对信号进行调制,通过Turbo编码增强信号的纠错能力,并采用LS信道估计技术来估计信道状态。 系统原理:    ......
  • 主机名解析过程:Hosts文件 | DNS | windows查看DNS缓存 | 隐患
    摘要目的:本文以linux虚拟机和Windows为例,来介绍一下主机名解析过程主机名解析不完全是靠DNS一、基本概念主机名:比如www.baidu.com、hadoop100等等1.Hosts文件hosts文件是一个文本文件,用来记录IP和Hostname(主机名)的映射关系在Windows和linux里面都有Windows:C:\Wi......
  • SqlSugar.SqlSugarException: 连接数据库过程中发生错误,证书链是由不受信任的颁发机
    本地代码调试时报错 解决办法:直接在“数据库连接字符串最后面”增加证书信任的配置。;TrustServerCertificate=true ......
  • hbuilder 运行项目一直在编译中
    解决:1.修改了hbuilder文件夹所在的位置不能有特殊符号2.重新装了node以上都不行卸载,重新装了回退几个版本的,然后按照官方提示的操作步骤进行解压安装,下载历史版本https://hx.dcloud.net.cn/Tutorial/HistoryVersion解压的时候按照它的要求解压到当前文件夹(之前我解压的......