gcc编译一个c文件的过程,会经过几个步骤:预编译,编译,汇编,链接。
编译命令
-E:预编译, 讲带#的语句重新展开到制定文件中
比如#define, #include "*.h"
gcc -E main.c -o main.i
-S:编译,将.o文件编译成编译成汇编文件(.s文件)
gcc -S main.c -o mian.s
-c:汇编,相比-S命令,多了assemble,生成目标文件(.o文件)
gcc -c main.c -o mian.o
最常用的命令,将.c文件直接编译成可执行文件或.o文件。
gcc main.c -o main
备注:
-std:使用哪个c语言标准编译
// 使用c99编译
gcc -std=c99
// 使用gnu99(c99的gnu扩展)编译
gcc -std=gnu99
编译静态库
gcc -c hello.c -o hello.o
// 静态库名称规则: lib+名字+.a(), 否则在使用-l链接的时候会找不到
ar -r libhello.a hello.o hello2.o
gcc main.c libhello.a -o main
// 或者:
gcc -L ./ main.c -lhello -o main (-L制定库的搜索路径,-l调用链接库)
说明:.a表示archive归档。ar类似于tar,起打包的作用。
编译动态库
gcc -c -fpic hello.c (fpic:采用浮动地址)
gcc -shared hello.o -o hello.so (.so告诉编译器编译成动态库,省略的话会编译成exe)
合并:gcc -fpic -shared hello.c -o hello.so
GCC 编译选项
选 项 | 含 义 |
ansi | 支持符合ANSI标准的C程序 |
pedantic | 允许发出ANSI C标准所列的全部警告信息 |
pedantic-error | 允许发出ANSI C标准所列的全部错误信息 |
w | 关闭所有告警 |
Wall | 允许发出Gcc提供的所有有用的报警信息 |
werror | 把所有的告警信息转化为错误信息,并在告警发生时终止编译过程 |