gcc
| gcc | |
|---|
| -I | 指定头文件目录(后面不加空格) |
| -g | 包含调试信息 |
| -c | 只编译,生成.o文件,不进行链接 |
| -On(n:0~3) | 编译优化,n越大优化的越多 |
| -Wall | 提示更多警告信息 |
| -D | 编译时宏定义(后面不加空格) |
| -E | 生成预处理文件 |
| -M | 生成.c文件与头文件依赖关系以用于Makefile,包括系统库的头文件 |
| -MM | 生成.c文件与头文件依赖关系以用于Makefile,不包括系统库的头文件 |
toolchain
| |
|---|
| gcc | 编辑器 |
| glibc | 该库实现Linux系统函数,例如open、read等,也实现标准c语言库,如printf等。几乎所有应用程序都需要安装与glibc链接 |
binutils一组用于编译、链接、汇编和其他调试目的的程序,包括ar、as、ld、nm、objcopy、objdump等
| toolchain中几种主要工具的作用 | |
|---|
| ar | 打包生成静态库 |
| as | 汇编器 |
| ld | 链接器。gcc完成链接步骤中,其实是gcc调用链接器ld,将用户编译生成的目标文件连同系统的libc启动代码链接在一起形成最终的可执行文件 |
| nm | 查看目标文件中的符号(全局变量,全局符号等) |
| objcopy | 将原目标文件中的内容复制到新的目标文件中,可以通过不同的命令选项调整目标文件的格式,比如去除某些ELF文件头 |
| objdump | 用于生成反汇编文件,主要依赖objcopy实现,a.out编译时需要-g,objdump -dSsx a.out > file |
| ranlib | 为静态库文件创建索引相当于ar命令的s选项 |
| readelf | 解读ELF文件头 |