目录
1. gcc的使用格式
例如:
gcc hello.c -o hello 或 gcc hello.c
2. 程序编译过程
例如:compile.c 源文件
//compile.c
#include <stdio.h>
#define M 10
int main(void)
{
printf("hello, M is %d\n", M);
return 0;
}
2.1 预处理:
头文件包含内容的处理、条件编译的处理、宏替换的处理
(-E 预处理,输入是C源码,输出是经过预处理的C源码)
gcc -E compile.c -o compile.cpp
2.2 编译:
(-S 编译,输入是经过预处理的C源码,是输出是 .s 汇编源码)
gcc -S compile.c -o compile.s
2.3 汇编:
(-c 汇编,输入是汇编源码,输出是 .o 二进制代码--不可执行的,不含有库函数的)
gcc -c compile.c -o compile.o
2.4 链接:
(-o 链接,输入是不可执行二进制代码及用到的库函数库文件,输出是最终的可执行二进制代码)
gcc compile.o -o compile
3. 后缀名 所对应的语言
3.1 -I dir
gcc 编译默认在 /usr/include 和 ./ 当前目录路径下寻找库函数的头文件,如果没有需要使用 -I dir 指定头文件路径
//compile.c
#include <stdio.h>
#include "myfun.h"
#define M 10
int main(void)
{
int i=3,j;
j = myfun(i);
printf("j = %d\n", j);
printf("hello, M is %d\n", M);
return 0;
}
gcc compile.c myfun.c -o compile -I./include
3.2 -l
-l(小写L)指定需要使用的库文件,后面直接跟库的名称
//compile.c
#include <stdio.h>
#include <math.h>
#include "myfun.h"
#define M 10
int main(void)
{
int i=3,j;
float f;
j = myfun(i);
printf("j = %d\n", j);
f = cos(i);
printf("f = %f\n", f);
printf("hello, M is %d\n", M);
return 0;
}
gcc compile.c myfun.c -o compile -I./include -lm
(注:-lm 的m是库名称,/usr/lib/libm.so是库文件名称,包含了数学库math.h中的库函数cos)
(定义和关系:m是库名称,libm.so是库文件名称,库文件名称切(头)前缀lib和断(尾)后缀.so就是库名称)
3.3 -DM
-DM 例如 -D M=100 相当于在程序中添加#define M 100(用于调试)
//compile.c
#include <stdio.h>
//#define M 10
int main(void)
{
printf("hello, M is %d\n", M);
return 0;
}
gcc compile.c -o compile -D M=100
4. 使用优化选项
5.使用调试选项