第四章 Linux C编程基础--GCC
主要内容
•
gcc
简介
•
利用
gcc
编译
c
程序
•
利用
make
工具简化编译过程
•
调试
开发工具环境
•
开发工具:编辑工具、编译工具和调试工具,甚至配置工具和项目管理工具。
•
开发环境:
(1)基于文本的:vim+gcc+gdb+make
(2)集成开发平台:Eclipse+CDT、
基于文本的开发平台
•
编辑工具:
vim
,
emacs
。
•
编译工具:
gcc
,要使用指令完成编译,比如:
gcc
–o hello
hello.c
•
调试工具:
gdb
。
•
项目管理工具:
make
,编写
makefile
文档来完成相关的一系列
gcc
指令。
gcc简介
•
名称:
–
G
NU project
C
and
C
++
C
ompiler
–
G
NU
C
ompiler
C
ollection
–
gcc
是一个全功能的
ANSI C
兼容编译器,它是所有
UNIX
系统可用的
C
编译器。
–
gcc
是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高
20%~30%
。
•
对
C/C++
编译的控制
–
预处理:对源代码文件中的文件包含
(include)
、预编译语句
(
如宏定义
define
等
)
进行分析。
–
编译:就是把
C/C++
代码“翻译”成汇编代码。
–
汇编:将第二步输出的汇编代码翻译成符合一定格式的机器代码,生成以
.s
为后缀的目标文件。
–
链接:将上步生成的目标文件和系统库的目标文件和库文件链接起来,最终生成了可以在特定平台运行的可执行文件。
编译过程的四个阶段:
gcc的使用
•
基本使用格式
–
$
gcc
[
选项
] [
文件名
]
•
例:
//text.c
#include<stdio.h>
void main()
{
printf(“Hello World!\n”);
}
$gcc test.c
$./a.out
Hello World!
或
$gcc -o test test.c
$./test
Hello World!
GCC常用选项及含义
选项 | 含义 |
-o file | 将经过gcc处理过的结果存为文件file,这个结果文件可能是预处理文件、汇编文件、目标文件或者最终的可执行文件。假设被处理的源文件为source.suffix,如果这个选项被省略了,那么生成的可执行文件默认名称为a.out;目标文件默认名为source.o;汇编文件默认名为source.s;生成的预处理文件则发送到标准输出设备。 |
-c | 只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件。在对源文件进行查错时,或只需产生目标文件时可以使用该选项。 |
-g[gdb] | 在可执行文件中加入调试信息,方便进行程序的调试。如果使用中括号中的选项,表示加入gdb扩展的调试信息,方便使用gdb来进行调试 |
-O[0、1、2、3] | 对生成的代码使用优化,中括号中的部分为优化级别,缺省的情况为2级优化,0为不进行优化。注意,采用更高级的优化并不一定得到效率更高的代码。 |
-w | 禁止所有警告 |
-Wwarning | 允许产生warning类型的警告,warning可以是:main、unused等很多取值,最常用是-Wall,表示产生所有警告。如果warning取值为error,其含义是将所有警告作为错误(error),即出现警告就停止编译。 |
-pedantic [-errors] | 表示gcc只发出ANSI/ISO C标准列出的所有警告, -pedantic –errors 仅仅针对错误。 |
-ansi | 支持ANSI/ISO C 的标准语法,取消GNU的语法中与该标准有冲突的部分,但并不保证生成与ANSI兼容代码。 |
-Idirname | 将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。 |
-Ldirname | 将dirname所指出的目录加入到程序函数档案库文件的目录列表中,是在连接过程中使用的参数。在预设状态下,连接程序ld在系统的预设路径中(如/usr/lib)寻找所需要的档案库文件,这个选项告诉连接程序,首先到-L指定的目录中去寻找,然后到系统预设路径中寻找,如果函数库存放在多个目录下,就需要依次使用这个选项,给出相应的存放目录。 |
-lname | 在连接时,装载名字为“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目录下。例如,-lm表示连接名为“libm.a”的数学函数库。 |
例1
... ... 太烦了,这破玩意不过给我贴图片截图 ... ...
... ... 不写了,跳过第四五章,需要资源私聊 ... ...