gcc编译步骤与常用参数
gcc编译步骤与常用参数
编译步骤
- 源码
hello.c
只有寥寥几行代码
#include <stdio.h>
int main(void)
{
printf("hello\n");
}
- 执行-E预处理,得到
hello.i
,生成了很长的.i文件
- -S编译
helloc.s
,这一步是最重要的,得到的二进制,可以看出很多问题:
可以使用objdump -dS ELF
查看反汇编(重定向到文件中查看方便)
- -c汇编得到
hello.o
,知识将汇编指令翻译成机器指令,人看不懂
-
最后一步链接得到ELF文件,
1.数据段合并
2.地址回填
常用指令选项
-
-v 查看gcc版本号
-
-I 指定头文件目录,注意ID和目录之间没有空格
hello.c
依赖目录inc
下的hello.h
,使用gcc hello.c -o hello
会报错:
需要-I 指定头文件目录:gcc hello.c -o hello -I./inc
补充说明——头文件守卫:比如这个hello.h
被某源文件一直#include "hello.h"、#include "hello.h"... ...,利用头文件守卫可以保证源文件只include一次该头文件的内容,避免重复包含
-
-c 只编译,生成.o文件,不进行链接
-
-g 包含调试信息,配合gdb使用,见gdb常用使用总结
-
-0n n=0~3 编译优化,n越大优化得越多
-
-Wall 提示更多警告信息,-w取消所有警告
-
-D
编译时定义宏,注意-D和 ,一般用于调试信息的开关之间没有空格 -
-E 生成预处理文件
-
-shared 制作动态库
-
-fPIC 生成位置无关的代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)