linux GCC程序编译
来源:互联网 发布:大数据优点 编辑:程序博客网 时间:2024/05/22 13:25
一:概述
linux系统下的gcc(GNU C Compile)是GNU的代表作编译器之一,gcc可以在多个硬件平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30.GCC编译器能将C、C++语言源程序、汇编程序编译、连接成可执行文件。
注意:在linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。
二:编译的四个阶段
预处理(Pre-processing)
编译 (Compiling)
汇编 (Assembling)
链接 (Linking)
GCC是通过文件的后缀名来区别输入文件的类别
下面各种类别文件的后缀名:
* .c为后缀的文件:是C语言源代码文件
* .C .cc .cxx为后缀名的文件:是C++源代码文件
* .s为后缀的文件:是汇编源代码文件
* .i为后缀的文件:是已经预处理过的C源代码文件
* .ii为后缀的文件:是已经预处理过的C++源代码文件
* .S为后缀的文件:是经过预编译的汇编语言源代码文件
* .h为后缀的文件:是头文件
* .o为后缀的文件:是编译后的目标文件
* .a为后缀的文件:是有目标文件构成的库文件
三:编译选项
GCC编译器的编译选项大概有100个,但是大部分使用不到,真正使用是只有10来个,如:
1:-o
作用:指定编译好的可执行文件的文件名
范例:gcc kaka.c -o kaka
结果:生成kaka
注意:如果缺省-o,那么默认的名字为a.out
范例:gcc kaka.c
结果:生成a.out
2:-c
作用:只进行预处理
和编译,不链接生成可执行文件,编译器只是将输入的源文件生成为后缀为.o的目标文件
范例:gcc -c kaka.c
结果:生成kaka.o
3:-g
作用:产生调试工具(GNU的gdb)所需要的符号信息。也就是说如果你想要对编译出的程序
进行调试,就必须要加上这个选项。
范例:gcc -g kaka.c -o kaka
结果:加上-g的明显的特征的编译生成的后的课执行文件变大了
4:-O、-O2(注意是大o)
作用:-O对程序进行优化编译、链接,采用这个编译选项,整个源代码会再编译、链接过程中进行
优化处理,这样产生的可执行文件的执行效率可以提高,但是相应的编译、链接时间相应
的增长。
-O2比-O更好的优化编译、链接,当然整个编译、链接过程会更慢
范例:gcc -O kaka.c -o kaka
gcc -O2 kaka.c -o kaka1
然后用time加执行文件计算执行的时间
time ./kaka
time ./kaka1
结果:加有-O生成的文件执行的时间比不加短
加有-O2生成的文件执行时间比加有-O更短
5:-Idirname(注意是大写i)
作用:将dirname所指出的目录加入到程序头文件目录列表中。
C程序中的头文件包括两种情况:
<>一种是编译器自带的头文件
""一种的用户自己编写的头文件
对于<>,编译器在系统预设的头文件目录(如/usr/include)中搜索相应头文件,
对于“”编译器在当前目录查找所需头文件,没有后在到系统预设目录中查找。
而一般情况之下,编译器在编译、链接时候只从编译器自带的头文件目录查找,
所以如果想让编译器查找自己的头文件,那么就必须将自己编写的头文件所在
目录加入到编译器查找的头文件目录中。
范例:gcc I/home/kaka/include kaka.c -o kaka
6:-Ldirname
作用:将dirname所指出的目录加入到编译器查找的库文件目录列表中
默认情况下,链接程序时,系统会到预设目录(如/usr/lib)寻找所需的库文件
但是加入了—Ldirname这个编译选项,那么编译器在连接时,会先到dirname
指定的目录中查找,然后再到系统预设路径中查找。
范例:gcc -L/home/kaka/lib kaka.c -o kaka
7:-lname
作用:链接一些除C库之外的一些库文件,因此使用时应该特别指出
“libname.a”的函数库,该函数库位于系统预设的目录下,或者在-L选项指定的
目录下。
范例:gcc -L/home/kaka/lib -llibm.a kaka.c -o kaka
8: -static
作用:静态链接库文件
库的链接方式有两种:
动态链接
静态链接
通常用.so作为动态链接的后缀,用.a作为静态链接的后缀。
当使用静态链接库时,连接器会找出所程序所需要的文件,然后和可执行文件链接到
一起,一旦链接成功,静态程序库也就不需要了。
当使用动态链接库时,动态库会再执行程序的内留下一个标记,一定程序执行遇到这个
标记时,首先必须载入这个库,然后加载所需的函数。
注意:linux下进行链接的时候,缺省状态下用的是动态链接库。
范例:gcc -static kaka.c -o kaka
结果:用静态链接库的比用动态链接库生成的文件要大很多倍
9:-Dkaka
作用:定义宏,相当于在程序中使用#define kaka
10:-Wall
作用:生成所用警告信息
11:-w
作用:不生成任何警告信息
- linux GCC程序编译
- linux gcc编译C程序
- linux历程--GCC程序编译
- linux gcc编译C程序
- linux gcc编译C程序
- linux编程基础:GCC程序编译选项
- linux下GCC编译C程序
- linux下gcc编译c程序
- Linux下用gcc编译c程序
- linux GCC -- C程序的编译
- Linux编程基础1 GCC程序编译
- linux gcc编译C程序 分享
- Linux gcc g++ 编译C++程序
- linux下GCC编译C程序(一)
- Linux下用gcc编译安装程序
- Linux gcc gdb 编译调试程序
- Linux系统GCC程序编译,GNU程序调试
- gcc编译C++程序
- php编程之图像处理
- final修饰符解析
- 分享一个不错的前端开发和网页设计站点,www.it356.com
- Fedora 14 下安装rar
- 小小吐槽!
- linux GCC程序编译
- 《大话处理器》连载——微架构(11) 从顺序执行到乱序执行——因时制宜
- 非常程序java程序员的细节------>值得你的思考
- 判断一个图形是否为对称图形
- 弱校ACM的奋斗史(弱校不弱)
- jackson中的写和解析JSON的api例子
- 窗口消息的传递(一)
- FTP协议
- Haskell教程