1、gcc

    编译生成目标文件(Relocatable),详见。

    -Dmacro[=defn]

    定义一个宏,详见第 3 节 “条件预处理指示”

    -E

    只做预处理而不编译,cpp命令也可以达到同样的效果,详见。

    -g

    在生成的目标文件中添加调试信息,所谓调试信息就是源代码和指令之间的对应关系,在gdb调试和objdump反汇编时要用到这些信息,详见第 1 节 “单步执行和跟踪函数调用”

    -Idir

    dir是头文件所在的目录,详见。

    -Ldir

    dir是库文件所在的目录,详见第 3 节 “静态库”

    输出“.o文件: 文件 .h文件”这种形式的Makefile规则,-MM的输出不包括系统头文件,详见。

    -o outfile

    outfile输出文件的文件名,详见第 2 节 “main函数和启动例程”

    -O?

    各种编译优化选项,详见。

    -print-search-dirs

    打印库文件的默认搜索路径,详见第 3 节 “静态库”

    -S

    编译生成汇编代码,详见。

    -v

    打印详细的编译链接过程,详见第 2 节 “main函数和启动例程”

    -Wall

    打印所有的警告信息,详见。

    options是传递给链接器的选项,详见第 4 节 “共享库”

    2、gdb

    1. 在集中介绍了的基本命令和调试方法。

    2. 第 1 节 “函数调用”提到了gdb的指令级调试和反汇编命令。

    3. 如果一个程序由多个.c文件编译链接而成,用gdb调试时如何定位某个源文件中的某一行代码呢?在有介绍。

    3、其它开发调试工具

    1. as,汇编器,用法详见例 18.1 “最简单的汇编程序”

    2. ld,链接器,用法详见,用--verbose选项可以显示默认链接脚本,详见第 1 节 “多目标文件的链接”

    3. readelf,读ELF文件信息,用法详见。

    4. hexdump,以十六进制或ASCII码显示一个文件,用法详见第 5.1 节 “目标文件”

    5. ar,把目标文件打包成静态库,用法详见。