c/c++本质总结
在这一阶段我们又学习了很多新的语法规则,首先读者应该回到第 13 章 本阶段总结把那些知识点重新总结一遍。然后我们总结一下各种开发调试工具的用法。
1、gcc
-c
-
编译生成目标文件(Relocatable),详见第 2 节 “
main
函数和启动例程”。 -Dmacro[=defn]
-
定义一个宏,详见第 3 节 “条件预处理指示”。
-E
-
只做预处理而不编译,
cpp
命令也可以达到同样的效果,详见第 2.1 节 “函数式宏定义”。 -g
-
在生成的目标文件中添加调试信息,所谓调试信息就是源代码和指令之间的对应关系,在
gdb
调试和objdump
反汇编时要用到这些信息,详见第 1 节 “单步执行和跟踪函数调用”。 -Idir
-
dir
是头文件所在的目录,详见第 2.2 节 “头文件”。 -Ldir
-
dir
是库文件所在的目录,详见第 3 节 “静态库”。 -M
和-MM
-
输出“
.o
文件:.c
文件.h
文件”这种形式的Makefile规则,-MM
的输出不包括系统头文件,详见第 4 节 “自动处理头文件的依赖关系”。 -o outfile
-
outfile
输出文件的文件名,详见第 2 节 “main
函数和启动例程”。 -O?
-
各种编译优化选项,详见第 6 节 “volatile限定符”。
-print-search-dirs
-
打印库文件的默认搜索路径,详见第 3 节 “静态库”。
-S
-
编译生成汇编代码,详见第 2 节 “
main
函数和启动例程”。 -v
-
打印详细的编译链接过程,详见第 2 节 “
main
函数和启动例程”。 -Wall
-
打印所有的警告信息,详见第 4 节 “第一个程序”。
-Wl,options
-
options
是传递给链接器的选项,详见第 4 节 “共享库”。
2、gdb
-
在第 10 章 gdb集中介绍了
gdb
的基本命令和调试方法。 -
在第 1 节 “函数调用”提到了
gdb
的指令级调试和反汇编命令。 -
如果一个程序由多个
.c
文件编译链接而成,用gdb
调试时如何定位某个源文件中的某一行代码呢?在第 1 节 “多目标文件的链接”有介绍。 -
在第 6 节 “指向指针的指针与指针数组”提到了用
gdb
调试时如何给程序提供命令行参数。
3、其它开发调试工具
-
as
,汇编器,用法详见例 18.1 “最简单的汇编程序”。 -
ld
,链接器,用法详见例 18.1 “最简单的汇编程序”,用--verbose
选项可以显示默认链接脚本,详见第 1 节 “多目标文件的链接”。 -
readelf
,读ELF文件信息,用法详见第 5.1 节 “目标文件”。 -
objdump
,显示目标文件中的信息,本书主要用它做反汇编,用法详见第 5.1 节 “目标文件”。 -
hexdump
,以十六进制或ASCII码显示一个文件,用法详见第 5.1 节 “目标文件”。 -
ar
,把目标文件打包成静态库,用法详见第 3 节 “静态库”。 -
ranlib
,给ar
打包的静态库建索引,用法详见第 3 节 “静态库”。 -
nm
,查看符号表,用法详见第 2 节 “main
函数和启动例程”。
本章节摘自《Linux C编程一站式学习》
https://akaedu.github.io/book/
版权 © 2008, 2009 宋劲杉, 北京亚嵌教育研究中心
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free
Documentation License,
Version 1.3 or any later version published by the Free Software Foundation; with the Invariant
Sections
being 前言,
with no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in
GNU Free Documentation License Version 1.3, 3 November 2008.