详解编译器编译原理

发布时间 - 2026-01-11 01:54:49    点击率:

详解编译器编译原理

什么是gcc 

什么是gcc:gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器(GNU C Compiler),现在已经支持多种语言了,如C、C++、Java、Pascal、Ada、COBOL语言等。

gcc支持多种硬件平台,甚至对Don Knuth 设计的 MMIX 这类不常见的计算机都提供了完善的支持

gcc主要特征 

1)gcc是一个可移植的编译器,支持多种硬件平台
2)gcc不仅仅是个本地编译器,它还能跨平台交叉编译。
3)gcc有多种语言前端,用于解析不同的语言。
4)gcc是按模块化设计的,可以加入新语言和新CPU架构的支持
5)gcc是自由软件

gcc编译过程

预处理(Pre-Processing)
编译(Compiling)
汇编(Assembling)
链接(Linking)
Gcc *.c –o 1exe (总的编译步骤)
Gcc –E 1.c –o 1.i  //宏定义 宏展开
Gcc –S 1.i –o 1.s 
Gcc –c 1.s –o 1.o  
Gcc 1.o –o 1exe
结论:gcc编译工具是一个工具链。。。。

hello程序是一个高级C语言程序,这种形式容易被人读懂。为了在系统上运行hello.c程序,每条C语句都必须转化为低级机器指令。然后将这些指令打包成可执行目标文件格式,并以二进制形式存储器于磁盘中。

gcc常用编译选项

选项        作用
-o        产生目标(.i、.s、.o、可执行文件等)
-c        通知gcc取消链接步骤,即编译源码并在最后生成目标文件
-E        只运行C预编译器
-S        告诉编译器产生汇编语言文件后停止编译,产生的汇编语言文件扩展名为.s
-Wall    使gcc对源文件的代码有问题的地方发出警告
-Idir      将dir目录加入搜索头文件的目录路径
-Ldir     将dir目录加入搜索库的目录路径
-llib      链接lib库
-g        在目标文件中嵌入调试信息,以便gdb之类的调试程序调试

练习 

gcc -E hello.c -o hello.i(预处理)
gcc -S hello.i -o hello.s(编译)
gcc -c hello.s -o hello.o(汇编)
gcc hello.o -o hello(链接)
以上四个步骤,可合成一个步骤
gcc hello.c -o hello(直接编译链接成可执行目标文件)
gcc -c hello.c或gcc -c hello.c -o hello.o(编译生成可重定位目标文件)

建议初学都加这个选项。下面这个例子如果不加-Wall选项编译器不报任何错误,但是得到的结果却不是预期的。

#include <stdio.h>
int main(void)
{
    printf("2+1 is %f", 3);
    return 0;
}

Gcc编译多个.c

hello_1.h
hello_1.c
main.c

一次性编译

gcc  hello_1.c main.c –o newhello

独立编译

gcc -Wall -c main.c -o main.o
gcc -Wall -c hello_1.c -o hello_fn.o
gcc -Wall main.o hello_1.o -o newhello

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 详解编译器编译原理  # 编译器原理  # 详解 linux c++的编译器g++的基本使用  # C/C++编译器GCC下的常用编译命令总结  # Java虚拟机JVM性能优化(二):编译器  # C++编译器无法捕捉到的8种错误实例分析  # Linux上安装GCC编译器过程  # 是一个  # 汇编语言  # 可执行  # 是个  # 多个  # 还能  # 被人  # 并在  # 这类  # 希望能  # 并以  # 谢谢大家  # 转化为  # 不加  # 每条  # 有多种  # 读懂  # 不报  # 可执行文件  # 自由软件 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 再谈Python中的字符串与字符编码(推荐)  简历在线制作网站免费版,如何创建个人简历?  如何在宝塔面板创建新站点?  详解Android图表 MPAndroidChart折线图  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Java遍历集合的三种方式  Laravel如何生成URL和重定向?(路由助手函数)  韩国服务器如何优化跨境访问实现高效连接?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何在IIS服务器上快速部署高效网站?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】  Linux系统运维自动化项目教程_Ansible批量管理实战  微信小程序 闭包写法详细介绍  JavaScript模板引擎Template.js使用详解  php打包exe后无法访问网络共享_共享权限设置方法【教程】  php485函数参数是什么意思_php485各参数详细说明【介绍】  Laravel如何使用Eloquent进行子查询  图册素材网站设计制作软件,图册的导出方式有几种?  高防服务器租用指南:配置选择与快速部署攻略  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  网站制作软件有哪些,制图软件有哪些?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  如何用景安虚拟主机手机版绑定域名建站?  Laravel中的Facade(门面)到底是什么原理  JavaScript中的标签模板是什么_它如何扩展字符串功能  微信小程序 canvas开发实例及注意事项  js实现获取鼠标当前的位置  简单实现Android验证码  佛山企业网站制作公司有哪些,沟通100网上服务官网?  动图在线制作网站有哪些,滑动动图图集怎么做?  如何破解联通资金短缺导致的基站建设难题?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel安装步骤详细教程_Laravel环境搭建指南  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  HTML 中动态设置元素 name 属性的正确语法详解  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  EditPlus中的正则表达式实战(5)  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  zabbix利用python脚本发送报警邮件的方法