今天是周末,没什么事便去图书馆溜达溜达,找本书翻翻,发现《Linux入门很简单》这本书,感觉不错。作者以ubuntu为第一人称讲述linux相关的知识。具体都讲了什么我就不一一介绍了,内容很风趣,有些知识点让人很容易接受和理解。刚开始吸引我的是apt相关内容,我之前一直用apt但是都不知道其还有那些功能,具体是做什么的。看完之后感觉收获不小。又看了一下安装过程,分区,BIOS,和grub什么的,感觉作者的讲述真的是简单易懂。这些内容我就暂不介绍了,刚刚看完本书的最后一章,程序是怎样炼成的感觉自己对程序的理解有近了一步,下面记录一下这章的相关内容。在此也推荐一下这本书给喜欢linux下编程的同学,真的很不错哈!
1、编译过程详解
有时候我们编译一个简单的程序如:gcc main.c -o main,虽然只用了一个gcc命令,但其实GCC其实是一个编译器套装,一个以gcc命令为首的施工队,该施工队主要成员有gcc,cpp,as和ld这四个命令。
施工第一步--预处理:什么是预处理就不多说了,就是将文件中的红定义展开。命令为gcc -E main.c > main_cpp.c,或者直接使用预处理命令cpp main.c > main_cpp.c,这样几行的程序可能就变成几百行了。
施工第二部--编译:源文件变成了汇编文件,命令为gcc -S main.c ,得到main.s文件。
施工第三步--汇编:as拿到汇编代码后在对其处理就得到了真正的机器码,也叫汇编过程。文件从文本格式变成了二进制文件。命令为gcc -c main.c,得到main.o文件。
施工第四补--链接:经过预处理、编译、汇编之后的二进制代码,按说已经是机器码了,但是这时程序还是不能直接运行,还不完整。它只是main.c对应的机器吗,而其还调用了printf()等函数,在stdio库中,这就需要把这段stdio库中的机器码和我们编译的机器码链接起来。ld负责把这些机器码组装起来,然后就可以运行了。命令为gcc main .c ,一步搞定。
2、修理工--GDB
待补充
3、包工头--make
施工计划书Makefile,就是make用的file,就相当于一份施工计划书,上面写着整个工程分为几个模块,先用那几个文件编译成.o文件,再怎么链接,最后得到可以运行的二进制程序。make就是根据makefile来知道GCC他们进行施工。
4、分析师--configure
大家在源码安装软件的过程知道,在make之前还有一个./configure命令。它是做什么的呢?编译好的二进制程序不是放到哪里动能运行,其实运行它还需要很多库文件来协助。如果该系统里没有这个程序所依赖的库,那程序指定运行不起来。因此,configure就是在开工之前对施工环境进行检查,材料是否充足。configure是每个软件自带的一个脚本,不像make本身是一个程序。运行 ./configure后,他会检查有什么库,什么编译器,然后因地制宜的设计一份Makefile。如果条件不足,就会报错,告诉用户缺什么。
5、规划局--Autoconf
Autoconf是用来自动生成configure脚本的,它由四个成员组成:Aclocal,Autoconf、Automake和Autoscan。Autoscan负责检查源码目录结构,看看有哪写需要编译的文件。Aclocal用于检测一些编译环境相关的内容,例如使用哪个编译器。Autoconf负责生成configure脚本。Automake负责生成Makefile的蓝本-makefile.in。具体过程需要修改一些内容,我就不多说了。
记录以上内容,感觉自己对c语言在linux下的编程理解更近了一步,希望大家也有所收获,没怎么看懂的话直接看书吧 ,还是很不错的。
Linux编程流程详解
本文详细介绍了在Linux环境下C语言程序的编译过程,包括预处理、编译、汇编及链接四个步骤,并对GDB调试工具、make工具、configure配置脚本及Autoconf工具集进行了概述。

被折叠的 条评论
为什么被折叠?



