GCC参数的使用
gcc 主要有三个参数-E -S -c -o -l 以及不加参数
四个阶段:预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。
-o
生成文件
如果有-E 就是生成预编译文件
如果是-S 就是生成汇编文件
如果是-c 就是生成目标文件
-E参数
-E代表 只进行预编译
将包含的头文件重新展开,还有#define的这些语言
gcc -E main.c > main.i
#or
gcc -E main.c -o main.i
#这个时候需要自己输入到一个新的文件里
-S
进行预编译 + 编译
会生成一个main.s的汇编文件
gcc -S main.c -o main.s
-c
进行预编译 编译 以及汇编
会生成一个目标文件,接下来只需要链接一下,就可以生成执行文件
gcc -c main.c -o main.o
#Linking 链接
gcc main.o -o main
#main是一个可执行文件
-I (大写的i)
指定自己的头文件目录
在编译成目标文件的时候可以优先使用,在编译时打桩可以使用。(打桩具体参考《深入理解计算机操作系统》第三版P492)
-L
指定自己的库文件位置
-l(小写)指定具体的库名字
Linux的库文件有两种,动态链接库通常是.so结尾,静态链接库通常是.a结尾
-D
定义一个宏 使用方式如下
-DA
则定义一个A=1 默认情况下为1
-D B=2
则定一个B=2
-Wl
用来向链接器指定参数
gcc -Wl, --wrap,malloc -Wl,--wrap,free -o int1 A.o B.o
则链接器的参数会有两个--wrap malloc --wrap free
可以看到--wrap,free
变成了--wrap free
也就是,
变成了空格
参考:https://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html