1-5gcc
文章目录
- 1. gcc工作流程
- 2.常用参数
- 3.gcc和g++
1. gcc工作流程
- 预处理:调用预处理器,展开头文件,宏替换,去掉注释行,得到的还是源文件
- 编译:调用编译器汇编,得到汇编文件
- 汇编:调用汇编器,得到二进制文件
- 链接:调用链接器对需要的库进行链接,得到可执行二进制
gcc test.c -o name
# 不加 -o参数 默认生成a.out 可执行程序
2.常用参数
gcc编译选项 | 含义 |
---|---|
-o | 指定名字 |
-I | 指定include包含文件的搜索目录 |
-g | 在编译时生成调试信息 |
-w | 不显示警告信息 |
-wall | 显示所有警告信息 |
-On | 编译器对代码进行优化,n取值范围0~3,O0不优化,O1默认优化,2,3级别更高 |
-std | 指定语言标准 |
-D | 编译时指定一个宏 |
-l | 指定使用的库 (库文件要掐头去尾 xxx) |
-L | 搜索库的路径 |
-fPIC/-fpic | 生成与位置无关的代码 |
-shared | 生成共享目标文件,通常用在建立共享库时 |
2.1 指定一个宏(-D)
在程序中有很多打印输出,这些在程序完成后是不需要的,如果事后删除很麻烦,就可以在程序里使用#ifdef DEBUG #endif
在调试的时候,编译指定宏,调试完成不在指定,自动就会删除
3.gcc和g++
- 编译阶段
- 后缀为.c的文件,gcc会看做c程序,g++会看做是c++程序
- 后缀为.cpp的文件,两者都会看作是c++文件
- 重点:g++会调用gcc,底层还是gcc编译,两者都可以编译c/c++代码
- 链接阶段
- gcc 和g++都可以链接到标准c库
- g++可以自动链接到c++库,但是gcc需要指定
-lstdc++
参数
- 关于
__cplusplus
宏的定义
- gcc会自动定义
__cplusplus
,但是不影响编译c文件 - gcc会根据文件后缀判断是否需要定义
__cplusplus
总结:
两者都既可以编译C/C++
g++可以直接编译cpp,而gcc需要指定链接参数