Chinaunix首页 | 论坛 | 博客
  • 博客访问: 342689
  • 博文数量: 40
  • 博客积分: 157
  • 博客等级: 入伍新兵
  • 技术积分: 536
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-15 19:44
文章分类

分类: LINUX

2013-11-24 13:13:02

转自:http://blog.csdn.net/liangxanhai/article/details/8133995

1、c语言中的各种后缀名代表的意思:

.a文件代表的是静态库

.c代表c源代码

.h代表c源代码头文件

.i代表的是c源代码(这是被预处理过后的结果)

.o对象文件

.s汇编语言的代码

.so动态库

2、c语言程序从源代码到生成可执行文件的过程:c程序源代码(.c文 件)-----(1)-----不用预处理的c程序源代码(.i文件)----(2)---汇编语言文件(.s文件)------(3)-----机器语 言文件(.o文件)-----(4)------可执行文件

其中的每个过程的意义如下:过程(1)是预处理阶段,这个阶段主要是根据#开头的命令 修改c源文件,主要的工作是,比如#include命令告诉预处理器读取系统文件stdio.h的内容并且把相应的内容插 入到源代码中去,就形成了.i文件。

过程(2):这个过程是编译阶段,编译器将文本文件.i文件翻译成文本文件.s文件。这个文件是与源文件等效的汇编语言程序。

过程(3):这个过程主要是汇编阶段,在这个阶段中汇编器将.s文件编译成机器语言指令就是这里的.o文件。

过程(4):这个过程是链接阶段,这个阶段主要就是将程序中的一些库函数用链接器给进行链接(链接过程包括静态链接和动态链接,在这里就不细说了)。

3、讲一下ubuntu下面c源程序的各种文件的获得:(比如有一个源程序为hello.c文件)

(1)、为了获得可执行文件可以使用命令:gcc hello.c -o a其中-o是用来指定所生成的可执行程序的文件名,比如这里生成的文件名是a。

(2)、如果程序中用到了不是gcc默认的库函数的时候,比如程序中用到了math.h这个头文件。这个头文件不是gcc默认的头文件,所以在编译的时候要加入-l库的首字母来进行编译。比如这里是:gcc hello.c -lm -o a.

(3)、为了将源程序编译成.o文件的命令是指定参数-c来进行编译。例如这里要生成hello.o文件的编译为:gcc -c hello.c -o hello.o。

(4)如果要执行预处理的话,使用的编译代码就是加上参数-E来进行编译,比如我们这里要生成hello.i文件,则我们编译代码是:gcc -E hello.c -o hello.i。

(5)、如果要生成汇编代码,使用的编译代码就是加上参数-S进行编译,比如我们要生成hello.s文件,则我们使用的编译代码是:gcc -S hello.c -o hello.s。


阅读(1924) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~