【GCC】gcc编译学习
文章目录
- 1. 过程
- 2. 常用命令选项
- 3. 多个源文件编译
- 参考内容
1. 过程
step1 : 预处理,生成.i
文件(预处理器cpp)
gcc -E [源文件] -o [生成的.i文件]
gcc -E test.c -o test.i
step2 : 汇编,将预处理后的文件转换为汇编语言生成.s
文件(编译器egcs)
gcc -S test.i -o test.s
step3 : 编译,生成目标文件.o
文件(汇编器as)
gcc -c test.s -o test.o
step4 : 链接,链接目标代码,生成可执行程序(链接器ld)
gcc test.o -o test
步骤简化:
# 一步走
gcc -o test test.c
# 两步走
gcc -c test.c -o test.o
gcc test.o -o test
2. 常用命令选项
-E : 仅激活预处理
-S : 仅激活预处理和变异,把源文件编译为汇编代码文件
-c : 仅编译,不链接为可执行文件。编译器将输入的.c文件生成.o目标文件,通常用于编译不包含主程序的子程序文件
-C : 预处理的时候不删除注释信息,一般和-E使用,一般分析程序的时候使用
-o : 后接输出文件,输出文件不能和源文件同名
-g : 产生gdb所必须的符号信息用于调试
-O : 对程序进行优化编译、链接
-O2 : 比-O更好的优化编译、链接
-Wall : 输出所有告警信息
-w : 关闭所有告警信息
-Idirname : 将名为dirname的目录加入到程序头文件目录列表中,它是在预处理阶段使用的选项,I指include
-Ldirname : 将名为dirname的目录加入到程序的库文件搜索目录列表中,它是在链接过程中使用的参数
-lname : 指编译器在链接时,装载名为libname.a的函数库,该函数库位于系统预定义的目录或由-L选项指定的目录下
3. 多个源文件编译
方法1:多个文件一起编译
# 将test1.c和test2.c分别编译后,链接生成test可执行文件
gcc test1.c test2.c -o test
方法2:分别编译各个源文件,然后对编译后得到的目标文件进行链接
gcc -c test1.c
gcc -c test2.c
gcc -o test1.o test2.o -o test # 链接
对于方法1,当有文件修改时,编译时需要将所有的文件重新编译;方法2仅需重新编译修改的文件,未修改的文件不用重新编译
参考内容
Linux下详解gcc编译过程(含代码示例)&& gcc使用教程_gcc编译命令-CSDN博客