ubuntu下编译c程序的详解
2012-10-31 20:47
141 查看
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>命令告诉预处理器读取系统文件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。
.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>命令告诉预处理器读取系统文件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。
相关文章推荐
- Ubuntu下编译C程序的详解
- ubuntu下编译JNI程序
- QT4.7.1以及QT create编译Ubuntu x86 pc运行程序提示g++ commond no find错误
- Ubuntu下QT使用CMake编译Opencv程序
- Ubuntu16.04.2 LTS下使用编译安装程序(使用configure、make、 make install)
- ubuntu环境下编译内核详解
- Ubuntu下android-4.0.3_r1源码下载,阅读工具安装配置,源码编译详解
- ubuntu编译websocketpp的example程序, 终于可以不用装boost了
- 在gem5的full system下运行 x86编译的测试程序 running gem5 on ubuntu in full system mode in x86
- ubuntu8.10下mplayer+win32codecs+Coreavc编译安装详解
- 64位ubuntu编译32位程序
- ubuntu14.04交叉编译vlc2.1.5源码,编译出在win32下运行的程序
- Ubuntu14.04下如何编译c程序
- Ubuntu 16.04使用NASM编译时用ld链接程序出现:i386 架构于输入文件 sandbox.o 与 i386:x86-64 输出不兼容(I386 architecture in the input file sandbox.o is not compatible with i386: x86-64 output)
- ubuntu64编译android程序提示缺少类库
- Ubuntu 下使用Eclipse编译、调试嵌入式程序的方法(中)
- 详解深谈Ubuntu编译源码包
- 转 解决64位ubuntu上编译32bit程序的问题
- Google V8编程详解(一)V8的编译安装(Ubuntu)
- 在ubuntu下编译opencv程序后,执行报下面到错误: error while loading shared libraries: libopencv_core.so.2.4: cannot op