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文件头 |