手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

笨兔兔的故事——带你了解Ubuntu,了解Linux

施工

[日期:2010-12-23] 来源:Ubuntu社区  作者: 懒蜗牛Gentoo [字体: ]
(51)施工
  
   主人不搞创作了,包工队的哥几个也就闲了。包工队主要成员有gcc,cpp,as,ld四个人,其中gcc是老大,其他几个干什么活都得听他调遣。主人一般也只跟gcc打交道,当写好了图纸——也就是源代码,比如叫test.c吧,写好了之后就直接把图纸交给gcc去处理就好了,gcc会去调动其他人进行各种处理。
  
   一般来说,gcc拿到图纸后,会首先叫来cpp进行预处理。预处理主要就是将文件里的宏定义进行展开。什么是宏定义呢?主人一般都比较懒,或者说,他们人类能力有限,不愿意写好多重复的,类似的东西,就把这些都定义成宏。比如,这么写#define TOTAL_NUMBER 18353226 就是定义总数为一千八百三十五万三千二百二十六,那么以后再要用这个总数的时候,就直接写TOTAL_NUMBER就好了,不用写那一大串数字。而且,如果总数变了,只要在最初#define的位置修改一次就可以,反正就是为了偷懒。那么cpp的任务就是把这类的宏定义都替换回去,把所有的TOTAL_NUMBER都替换成18353226,否则他们老大gcc看不懂,老大看不懂,那就没法继续往下干了,因为经过cpp预处理之后的文件就要交给gcc去编译了。
  
   编译又是怎么个意思呢?最初的图纸,也就是没有经过预处理的源代码,是人写的,一般懂相关语言(比如C语言)的人都能看懂。预处理之后的文件,虽然不那么直观了(TOTAL_NUMBER看着是不是比18353226直观?光写个18353226还以为是谁的QQ号呢),但终究只是做了下替换,还是人类可以看懂的。这样的代码经过gcc的编译之后,就不是普通人类可以看懂的源代码了,而是只有终极牛人才能读懂的汇编代码。汇编代码就比较贴近底层的机器码了,里面描述的都是一些基本的操作。打个比方吧,就比如描述切菜的过程,用c语言描述出来就像是“将黄瓜切片”,这么一句就搞定了。要是用汇编,那就是:左手扶住黄瓜,右手拿起刀,移动刀到黄瓜顶部,刀落下,到抬起,刀向黄瓜后部移动4毫米,刀落下,刀抬起,放下刀,走出厨房,走进卧室,找到创可贴,贴在左手食指上………… 好吧,总之,汇编是一种面向机器的,很复杂的程序设计语言。gcc的任务就是把c语言的源代码转换成贴近机器语言的汇编代码,为下一步as的工作做好准备。
  
   as拿到汇编代码后,对这样的代码再进行处理,得到真正的机器码,这个过程,也叫汇编。汇编之前的汇编代码是终极牛人能看的,那么机器码压根就不是人看的。汇编程序中至少还有些操作的助记符,比如什么add啊,mov啊之类的。寄存器也是有名字的,比如叫A,叫R1之类的。但是到了机器码,这些都没有了,这些都换成了各种各样的数字,一句人话都没有了。还说且黄瓜的事,要是用机器码来描述,那就相当于说:用32号设备扶住87号物体,24号设备拿起126号物体,移动126号物体到87号物体顶部,做2635号动作,再做2636号动作……
  
   好了,现在终于得到机器码了,机器码按说就是可以执行的代码了,但是,这时候的程序还是不能直接执行的,为什么?因为还有ld没有出场呢,他的工作叫:连接。光是一段机器码扔给机器去执行,机器照样摸不着头脑。而且,很多时候,一个程序不是一段机器码,而是由很多段机器码组成的,这些机器码分别存成很多的.o文件,这时候就需要ld出场了。ld负责把这些机器码组装起来,并且写明了各段代码的地址,从哪里开始执行之类的。就像我们造个机器人,脑袋啦,胳膊啦,大腿啦之类的都做好了,ld就是负责组装的。就算只有一段机器码,也就是只有一个.o文件,也要由ld进行一下处理,闹明白哪是头哪是尾,才能开始运行。
linux
【内容导航】
第1页:开端 第2页:醒来
第3页:工作 第4页:历史
第5页:也是历史 第6页:还是历史
第7页:串门 第8页:碎片
第9页:邻居 第10页:人才
第11页:来头 第12页:本事
第13页:开源 第14页:故事
第15页:minix 第16页:(16) linux
第17页:Friends 第18页:杀毒
第19页:免疫 第20页:权利
第21页:内存 第22页:内存
第23页:信封 第24页:
第25页:酒 too 第26页: 酒Again
第27页:Year 第28页:人物志
第29页:日志 第30页:XFS
第31页:分区 第32页:挂载
第33页:GIMP 第34页:QQ
第35页:运算 第36页:
第37页:协作 第38页: 加速
第39页:OpenGL 第40页:Power On
第41页:init 第42页:EXT4
第43页:有朋远来 第44页:他乡故知
第45页:可视电话 第46页:磁盘
第47页:硬解 第48页:刻录
第49页: Rubbish 第50页:Bug
第51页:施工 第52页:规划
第53页:因地制宜 第54页:Richard
第55页:Stallman 第56页:进程
第57页:僵尸 第58页:State
第59页:毕加索 第60页: 对决
第61页:空间 第62页:VBox
第63页: 动物园 第64页:BT
第65页: tar包 第66页:编译安装
第67页:对话 第68页:聊天记录
第69页:LOSE 第70页:宏&微
第71页:无线网卡 第72页: 驱动
第73页:显卡驱动 第74页:SLax
第75页:备份 第76页:浮云
第77页:文件类型 第78页:fedora
第79页:RPM 第80页:(80) 爱丽恩
第81页:用户认证 第82页:不知道起啥名字了……
第83页: 第84页:权限
第85页:多用户 第86页:比武
第87页:间歇 第88页:(88) 舌战
第89页:了断 第90页:shell
第91页:乱七八糟 第92页:文泉驿
第93页:dropbox 第94页:
第95页:地址 第96页:绕路
第97页:邮局 第98页:端口
第99页:云山雾罩 第100页:记忆
第101页:浏览器的战争 第102页:狐狸出世
第103页:群雄并起 第104页:门派
第105页:任天堂 第106页:敲敲打打本正理,补补全全是便捷
第107页:往事如烟千般忆,一令似关万物分 第108页:片片云烟过眼 页页细审在目
第109页:众里寻他千百度 第110页:山高无路阻佳音,途中逢友传鸿雁
第111页:笔走龙蛇书妙体,顿开金锁走蛟龙 第112页:小熊猫下小熊猫,游戏者装游戏者
第113页:忠勇智计三千人,三千宠爱在一身 第114页:一寸光阴一寸金 寸金难买寸光阴
第115页: 集腋成裘,拼小为大 第116页:容量速度和安全,阵列级别零一五
第117页:喜得广厦千万间,挂载之后方欢颜 第118页:硬盘扩建无忧虑 文件共享有三八
第119页:通讯靠吼 第120页:认证张口
第121页:SMB初具规模 NFS虎视眈眈 第122页:某年某月某日 某时某分某秒
第123页: 长江后浪推前浪,一代新兔胜旧兔 第124页:伤情最是晚凉天,升级坎坷不堪言
第125页: 惨淡天空,又见光明 第126页:三个和尚没水喝,两个内核没图形
第127页:为体验换装KDE,要易用开发新界面 第128页:我不知道叫什么题目好了
第129页:人生自古谁无死 留洒芳香满内存
相关资讯       Ubuntu Linux 
本文评论   查看全部评论 (12)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 12 楼
* 匿名 发表于 2018/2/19 0:02:32
嗨,真想做个笨兔兔,陪在懒蜗牛身边,.😇
第 11 楼
* 匿名 发表于 2017/4/16 13:43:37
和俱
第 10 楼
* Aaron_Peng会员 发表于 2015/1/28 12:09:59
很不错,推荐给小白看看
回复 支持 (24) 反对 (26)
第 9 楼
* 匿名 发表于 2013/1/23 18:03:37
花了4天去看完,前面有些历史知识,还有些软件的原理,值得去看一下。后面十几章,我就粗略的带过了。显得有些臃肿,啰嗦,价值没有前面几章大。
回复 支持 (29) 反对 (32)
第 8 楼
* Jarod 发表于 2012/8/1 9:42:19
实在太精彩了!我留了份,哈哈
回复 支持 (38) 反对 (37)