gcc学习(1)——第一个C程序

来源:互联网 发布:tpshop多商户分销源码 编辑:程序博客网 时间:2024/04/30 04:40

        这么晚才来学习GCC,实在是惭愧。俗话说的好:Better late than never。那么为了自己能够学得扎实些,就尽可能记录下学习过程中的收获和疑问。

       一般第一个程序总是hello world,在此不脱俗地承袭这一惯例。主要是为了学习linux下最强大的编辑器vim和编辑器GCC的用法。

      首先,在vi下编辑程序。常用的命令行就那么些,在网上随便一搜就可以找到。

     接下来,退出vi的编辑,用gcc编译运行。

      第一条命令是:gcc -o hello hello.c(这里假定我们保存的hello world的文件名是hello.c)

      第二条命令是:./hello

     或者另外一种方式:

      第一条命令是:gcc hello.c

      第二条命令是:./a.out

      目前为止,我知道的是./a.out总是当前编译的程序产生的,所以会覆盖上一个程序产生的./a.out。


下面这些解释是在转载别人的解释:

(补充:在linux下编译链接程序,如果不加-o参数,生成的binary代码的名字都是默认的a.out。一不小心,a.out还会覆盖上次其他code生成的binary代码。

a.out是"assembler output"的缩写格式,代表汇编程序输出。在较早版本的类unix系统中,a.out是一种输出格式,用于可执行文件,目标文件和共享库。早期的 PDP-7系统上没有链接器,程序的创建过程是先把所有源文件连接成一个文件,然后进行汇编,产生的汇编程序保存在a.out中。这样a.out是名副其实的汇编输出,但到PDP-11之后,人们为其编写了链接器,程序的创建是先编译然后链接输出保存到a.out中,这时a.out其实已经是链接输出了,但输出的可执行文件仍然延续这个命名习惯。

Unix中的可执行文件用一种特殊的方式加上标签,这样便于系统确认它们的属性。普遍采用的方式是使用独特的数字,这些数字也被称为“神秘”数字。一个例子是,Unix文件系统中的superblock就是用下面的数字做标签:

#define FS_MAGIC 0x011954

而这个神秘数字是Berkeley fast文件系统的作者Kirk McKusick的生日。a.out文件中的神秘数字是0407。0407是PDP-11的一条无条件转移指令的二进制编码,这个数字会让执行器跳过 a.out头文件,进入程序的第一个真正的可执行指令。PDP-11是当时最正统的Unix机器,在a.out要规定神秘数字时,0407就被选择。

后来,因为构建a.out的复杂性,a.out格式被现在普遍使用的ELF格式所替代,但输出文件名仍旧是a.out。现在我们看到的a.out只是一个可执行文件,而不再是文件格式。ELF可执行文件的第一个字节是八进制177也就是16进制的7F,紧跟其后的2,3,4字节是ELF三个字母。你可以输入od -c a.out | head查看一下。)



     

其实也还是蛮简单,但是在vi的操作中有个小问题,还没找到答案:如何将一个原有的文件的文件名换成另一个文件名?

 

       

      

原创粉丝点击