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的操作中有个小问题,还没找到答案:如何将一个原有的文件的文件名换成另一个文件名?
- gcc学习(1)——第一个C程序
- Linux学习gcc——调试第一个OSG程序
- 黑马程序员——c语言学习---第一个程序
- Java学习(1)——第一个JAVA程序
- 用GCC编译调试第一个C程序
- [C#]第一个程序——HelloWorld
- C语言—第一个程序
- 第一个C程序(1)
- 【Objective-C学习-1】第一个OC程序
- iOS学习(二)Objective-C 第一个OC程序
- Objective-C学习笔记(三)——用Objective-C编写第一个程序:Hello,World!
- Java学习历程1——第一个Java程序
- SWT学习笔记(3)——第一个程序
- 第一个C程序
- 第一个C程序
- 第一个C程序
- 第一个C程序
- 第一个C程序
- android源码包中各个文件的作用
- android添加删除桌面快捷方式
- 了解 ASP.NET AJAX 验证和配置文件应用程序服务(三)
- C 的内存分布
- Javascript和CSS浏览器兼容总结
- gcc学习(1)——第一个C程序
- spring 开发过程中和第三方工具整合的问题:Unable to locate Spring NamespaceHandler
- MOS管 基础知识与应用
- 用函数实现单链表翻转的算法
- 看Oracle表空间大小--已经使用的百分比
- 了解 ASP.NET AJAX 本地化(四)
- vb.net异步查询方式一
- ASP操作XML
- 最新的DBHelper