一、基本信息
1. gcc --version查看系统上安装GCC信息。
二、使用
1,gcc -Wall test.c -Wall 选项用于在编译过程出问题时输出警告信息。
gcc -Wall test.c -o test.elf -o 选项用于指定输出的文件名。
2,把源代码真正传给编译器这前,预处理器会执行预处理指令,展开源代码中的宏。A, -E选项可以在预处理完成时停下gcc使用-o选项可以把预处理的结果存到一个文件中。
gcc –E test.c –otest.i
常用的选项有
B, -Dname[=definition] 配合源代码中的#ifdef name #endif预处理指令,可以实现条件编译。
C,-Uname 取消name定义。
D,-Idirectory[:directory[…]]可以定义多个目录用冒号分开?
E,对源文件中的#include目录的搜索顺序为。
(1)源代码目录
(2)用-I指定的目录
(3)环境变量C_INCLUDE_PATH和CPATH指定的目录。
(4)系统默认的include目录。
3,编译。GCC一般会把汇编语言输出到临时文件,并且在汇编器执行完后立刻删除,但可以使用-S选项,让编译程序在输出汇编之后停止。
gcc –S test.c
4, 汇编。这个过程把汇编语言翻译成二进制文件二进制文件是一个对像文件,包含机器执行源文件指定的功能,还包含一个符号表,这个符号表描述源文件中有外部链接的所有对象。
A,-c 选项使得GCC不会链接此程序,而是产生对象文件。
B,GCC –Wa 选项把命令行参数传递给汇编器,比如我们希望汇编器使用-as=circle.sym选项。可以这样写
gcc –v –o circle–Wa,-as=circle.sym.-L circle.c -Wa后面有一个逗号,后面是选项列表,选项这间不能有空格。注意这个L选项不是GCC中的L选项。
5,链接,把多个二进制文件链接成一个可执行文件,在链接过程中必须完成程序中多个模块之间的外部参考,把“参考符号”用对象实际的位置代换。简单说链接就是把多个对象文件放在一个文件中。
有些库可能不在GCC搜索路径,有三种方法可以让GCC找到这些库。
(1),指定库的完整路径名
(2),使用-L选项指定路径。
(3),把目录加到LIBRARY_PATH环境变量中。
6,文件类型。
当不是按照GCC的常用命名来命名源文件时可以用-x file_type选项来指明GCC如何对待这些文件。可以在一个命令行时多次使用-x选项,-x none会取消这些指示。
7,动态链接库。可以使用GCC的-shared选项建立。程序运时要能找到这些动态库。以下两种:A,加到程序运行的搜索PAHT中,B,用LD_LIBRARY_PATH指定路径。
8,独立程序。
9编译器警告:
-Werror 选项把警告当作出错处理。-W开头的选项启用大部分警告,
Wswitch-default当switch语句没有default卷标,此选项会发出警告。
-Wall启用大部分警告,但不是所有。例-Wshadow一个语句块的作用域内的变量与更大作用域的变量重名时会发出警告。
-Wextra会对合法但值得怀疑的地方发出警告。
10,优化,
-O0关闭所有优化选项
-O ,-O1
-O2
-O3
-Os优化占用空间,性能没有优化。
-f可以在选择一种优化而关闭其中的一些优化技术。
11,用于特定架构的选项。
12 调试,可以使用-g选项允许GCC在对象文件和执行文件中包含符号表和源代码行号信息。
13,剖析,使用-p选项会在程序中加入一个特别的函数,在执行时输出剖析信息。可以通过剖析信息了解哪些函数最耗时。剖析信息存成一个名为mon.out文件,可以使用prof工具分析。
14 环境变量
CPATH,C_INCLUDE_PATH
COMPILER_PATH
GCC_EXEC_PREFIX
LIBRARY_PATH
LD_LIBRARY_PATH
TMPDIR
各种先项参见《C语言核心技术》521页或GCC参考手册。
联系客服