linux程序编译
来源:互联网 发布:centos twisted 编辑:程序博客网 时间:2024/06/05 22:54
一、安装linux操作系统(ubuntu)。
http://blog.csdn.net/sshhbb/article/details/6651807
二、学会最简单linux操作命令。
http://blog.csdn.net/sshhbb/article/details/6704626
三、学会使用vim编辑你的程序。
http://blog.csdn.net/sshhbb/article/details/6705564
四、使用GCC编译程序。
gcc所遵循的部分约定规则:
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的档案库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.ii为后缀的文件,是已经预处理过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件。
gcc执行过程:
当使用gcc时,gcc会完成预处理、编译、汇编和连接。前三步分别生成目标文件,连接时,把生成的目标文件链接成可执行文件。gcc可以针对支持不同的源程序文件进行不同处理,文件格式以文件的后缀来识别.
在预处理阶段,输入的是C语言的源文件,通常为*.c。它们通常带有.h之类头文件的包含文件。这个阶段主要处理源文件中的#ifdef、 #include和#define命令。该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,因为基本上用不到;若非要生成这种文件不可,可以利用下面的示例命令:
gcc -E test.c -o test.i
在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s 。这个阶段对应的GCC命令如下所示:
GCC -S test.i -o test.s
在汇编阶段,将输入的汇编文件*.s转换成机器语言*.o。这个阶段对应的GCC命令如下所示:
GCC -c test.s -o test.o
最后,在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这一步骤,可以利用下面的示例命令完成:
GCC test.o -o test
示例代码 a.c:
#include <stdio.h>
int main()
{
printf("hello\n");
}
预编译过程:
这个过程处理宏定义和include,并做语法检查。
可以看到预编译后,代码从5行扩展到了910行。
gcc -E a.c -o a.i
cat a.c | wc -l
5
cat a.i | wc -l
910
编译过程:
这个阶段,生成汇编代码。
gcc -S a.i -o a.s
cat a.s | wc -l
59
汇编过程:
这个阶段,生成目标代码。
此过程生成ELF格式的目标代码。
gcc -c a.s -o a.o
file a.o
a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
链接过程:
链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。
gcc a.o -o a
程序运行:
./a
hello
GCC的使用
http://blog.csdn.net/sshhbb/article/details/6705636
五、运行你的第一个linux程序。
直接命令行处输入:./程序名 即可运行你linux平台下的第一个C程序了。
- 加速Linux程序编译
- 加速Linux程序编译
- linux GCC程序编译
- linux程序编译
- linux程序编译
- 加速Linux程序编译
- 加速Linux程序编译
- linux编译libevent程序
- LINUX下编译c程序
- Linux 下编译C程序
- [转]加速Linux程序编译
- cygwin编译linux C程序
- Linux下编译C程序
- Linux下编译C程序
- linux gcc编译C程序
- linux历程--GCC程序编译
- Linux下编译C程序
- linux gcc编译C程序
- 老罗的android之旅-----Android应用程序启动过程源代码分析
- RTSP实例
- another app is currently holding the yum lock;waiting for it to exit...
- rtsp
- 在数据库中NLS_DATE_LANGUAGE语句中的NLS是什么?
- linux程序编译
- POJ 3604 Professor Ben
- 苹果悄悄对iOS5做了一个重大改动:将逐渐禁止开发者访问UDID
- 大学助理工作总结
- 【error LNK2001】: 无法解析的外部符号 _IID_IDirectDraw7
- ListView列表的用法
- poj 1952 BUY LOW, BUY LOWER dp 但去重真是令人纠结啊!!!
- MySQL的AUTO_INCREMENT
- Jquery批量判断是否为空,是否为数字