[Pthread] Gcc 编译过程

本文详细介绍了GCC编译过程,包括预处理、编译与优化、汇编和链接四个阶段。预处理处理伪指令、特殊符号和宏;编译阶段将源代码转换为汇编代码并进行优化;汇编步骤将汇编代码转化为目标机器指令;链接阶段将所有目标文件整合成可执行文件。此外,还提到了静态库和动态库的创建及其在链接过程中的作用。
摘要由CSDN通过智能技术生成

现代编译器常见的编译过程: 源文件-->预处理-->编译/优化-->汇编-->链接-->可执行文件

对于gcc而言:

第一步 预处理            
        命令: 
            gcc -o test.i -E test.c  
            或者 cpp -o test.i test.c (这里cpp不是值c plus plus,而是the C Preprocessor)
        结果: 生成预处理后的文件test.i(可以打开后与预处理前进行比对,当然长度会吓你一跳)
        作用: 读取c源程序,对伪指令和特殊符号进行处理。包括宏,条件编译,包含的头文件,以及一些特殊符号。基本上是一个replace的过程。

第二步 编译及优化
        命令:
            gcc -o test.s -S test.i  
            或者 /路径/cc1 -o test.s test.i
        结果: 生成汇编文件test.s(可打开后查看源文件生成的汇编码)
        作用:通过词法和语法分析,确认所有指令符合语法规则(否则报编译错),之后翻译成对应的中间码,在linux中被称为RTL (Register Transfer Language),通常是平台无关的,这个过程也被称为编译前端。编译后端对RTL树进行裁减,优化,得到在目标机上可执行的汇编代码。gcc采用as 作为其汇编器,所以汇编码是AT&T格式的,而不是Intel格式,所以在用gcc编译嵌入式汇编时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值