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