一、程序构建过程
高级语言的代码无法被计算机执行,需要将高级语言代码编译成汇编语言,然后再将汇编语言翻译成机器指令,最后通过链接生成最后的可执行文件,此时该文件才可以被计算机执行。总共有四步:
1.1 预编译(预处理)
主要用于生成头文件的扩展以及宏替换等。生成 .i 文件
例如:
gcc -E hello.c -o hello.i
1.2 编译
主要将高级语言代码翻译成汇编语言,得到汇编文件。生成 .s 文件
例如:
gcc -S hello.i -o hello.s
1.3 汇编
主要将汇编语言翻译成机器指令,得到目标文件。生成 .o 文件
例如:
gcc -c hello.s
1.4 链接
主要将目标文件和库文件进行链接,生成可执行文件
例如:
gcc hello.o //生成 a.out 这一可执行文件
gcc hello.o -o hello //生成 hello 这一可执行文件
小案例:
二、文件名后缀
2.1 可读文本
- . h —— C语言源代码头文件
- . c —— 预处理前的C语言源代码文件
- . s —— 汇编语言文件
2.2 不可读的二进制
- . o —— 目标文件
- . a —— 静态库文件
- . so —— 共享(动态)库文件
- . out —— 可执行文件
三、gcc编译选项
格式:gcc [选项] [参数] 文件1 文件2 ...
3.1 要求掌握的选项
-
gcc -E 预编译
缺省输出到屏幕,使用-o选项来制定输出文件(.i文件) -
gcc -S 编译
将高级语言文件翻译成汇编语言文件(.s文件) -
gcc -c 汇编
将汇编语言文件汇编成机器语言文件(.o文件) -
gcc -o 指定输出文件名
-
gcc xxx.c 编译+链接,默认生成a.out
3.2 要求熟悉的选项
- gcc -std 用于指定C语言的执行标准
例如:gcc 1.c -std=c99
- gcc -v 用于察看gcc的版本信息
- gcc -Wall 用于尽可能显示所有警告信息
- gcc -Werror 用于将警告当作错误处理
3.3 了解的选项
-
gcc -g 用于生成调试信息,可以进行gdb调试;
用于检查段错误的原因;
gdb a.out->run->bt 回车,退出用quit -
gcc -x 显示指定源代码的编程语言
xxx.c - C语言
xxx.cpp - C++语言
xxx.for - Fortran语言
xxx.java - Java语言 -
gcc -O (大写的o)用于进行优化处理
3.4 扩展的选项
- man gcc/cc 查询有关gcc的详细信息