gcc全名: GNU C Compiler
过程选项
gcc编译器支持的后缀名(只列出部分)

gcc支持编译选项(只列出部分)
-
可以使用如下指令查看gcc详情
man gcc -
通过查看gcc官网手册

gcc -v //输出编译过程中详细信息
gcc -o //输出目标文件
gcc -E //预编译
gcc -S //编译
gcc -c //汇编
gcc -D //等同宏定义
gcc -g //包含gdb调试信息
gcc编译过程
gcc -v -o test.o test.c

-
预编译(未显示该过程,但实际有执行)
cpp -o test.i test.c gcc -E -o test.i test.c//等同上面指令 -
编译(生成汇编文件)
/usr/lib/gcc/x86_64-linux-gnu/5/cc1 -o /tmp/ccr10SkP.s test.c gcc -S -o /tmp/ccr10SkP.s test.c //等同上面指令 -
汇编(生成二进制目标文件)
as -v --64 -o /tmp/cc3gXlX5.o /tmp/ccr10SkP.s gcc -c -o /tmp/cc3gXlX5.o /tmp/ccr10SkP.s //等同上面指令 -
链接(链接其他目标文件)
/usr/lib/gcc/x86_64-linux-gnu/5/collect2 -o test /tmp/cc3gXlX5.o *.o+... gcc -o test test.o //等同上面指令
使用gcc选项演示编译过程
-
生成**.i**(预编译文件)
gcc -E -o test.i test.c -
生成**.s**(汇编文件)
gcc -S -o test.s test.i //该指令也能到达同样效果(.c --> .i --> .s)包含两个步骤 gcc -S -o test.s test.c -
生成**.o**(目标文件)
gcc -c -o test.o test.s //该指令也能到达同样效果(.c --> .i --> .s --> .o)包含三个步骤 gcc -c -o test.o test.c -
链接(生成可执行文件)
gcc -o test test.o //该指令也能到达同样效果(.c --> .i --> .s --> .o --> test)包四个步骤 gcc -o test test.c -
增加宏定义
gcc -DDBG -o test test.c //等同在test.c中定义#define DBG -
增加头文件路径
将头文件放到head文件夹内,让gcc去head文件夹内查找。默认系统会去/usr/include/找
gcc -Ihead -o test test.c可以使用如下指令查看系统头文件路径
whereis stdio.h
库选项

编译(动态/静态)可执行文件
-
编译成动态文件(默认)(不会将类库包含进来)
gcc -o test test.c -
编译成静态文件(将类库也包含进来)
gcc -static -o test test.c -
对比静态文件和动态文件,静态文件要比动态大很多

编译(静态库/动态库)

man ar //查看ar手册
-
编译成静态类库
gcc -c -o common.o common.c ar crv libcommon.a common.o gcc -o test test.c -L./ libcommon.a ./test
-
编译成动态库
gcc -fPIC -c -o common.o common.c gcc -shared -o libcommon.so common.o隐式调用
gcc -o test test.c -L./ libcommon.so执行,需要将libcommon.so拷贝进/usr/lib/或者将库文件路径加入/etc/ld.so.conf.d/libc.conf中
./test
显式调用暂不做讨论
警告选项

优化选项

一般有4个等级0-3,数字越大优化力度越强
gcc -O1 -o test test.c
个人博客:http://www.wolfnx.com/2018/04/07/GccOptions
作者 : wolfnx
邮箱 : wolfnx@outlook.com
邮箱2 : lostnx@gmail.com
本文深入探讨了GNU Compiler Collection(GCC)的使用方法,包括编译选项、预编译、编译、汇编、链接过程,以及如何生成不同类型的文件如预编译文件(.i)、汇编文件(.s)、目标文件(.o)和可执行文件。同时,介绍了如何增加宏定义、指定头文件路径,以及静态和动态库的创建与调用。
803

被折叠的 条评论
为什么被折叠?



