详解编译器编译原理
发布时间 - 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脚本发送报警邮件的方法

