1. gcc,GCC编译器
- -E:只进行预处理
- -c:只编译不链接
- -o ‘filename’:指定输出文件名
- -S:输出编译后的汇编代码文件
- -I:指定头文件路径
参考如下
2. ld,GNU链接器
- -static:静态链接
- -l‘libname’:指定链接某个库
- -e name:指定name为程序入口
- -r:合并目标文件,不进行最终链接
- o:指定输出文件名
- -s:清除输出文件的符号信息
- -L‘directory’:指定链接时查找路径,多个路径用冒号隔开
- -M:将链接的符号和地址输出为一个映射文件
参考如下
3. objdump,GNU目标文件可执行文件查看器
- -s:显示文件所有内容
- -S:显示源代码和反汇编代码
- -W:显示文件中包含DWARF调试信息格式的段
- -t:显示文件中的符号表
- -T:显示动态链接符号表
- -x:显示文件的所有头文件信息
4. cl,MSVC编译器
- /c:只编译不链接
- /Za:禁止语言扩展
- /link:链接指定的模块或给链接器传递参数
- /Od:禁止优化
- /O2:以允许速度最快为目标优化
- /O1:以最节省空间为目标优化
- /GR或/GR-:开启或关闭RTTI
- /Gy:开启函数级别链接
- /GS或/GS-:开启或关闭
- /Fa:输出汇编文件
- /E:只进行预处理并且把结果输出
- /I:指定头文件包含目录
- /Zi:启用调试信息
- /LD:编译产生DLL文件
- /LDd:编译产生DLL文件(调试版)
- /MD:与动态多线程版本运行库MSVCRT.LIB链接
- /MDd:与调试版动态多线程版本运行库MSVCRTD.LIB链接
- /MT:与静态多线程版本运行库LIBCMT.LIB链接
- /MTd:与调试版静态多线程版本运行库LIBCMTD.LIB链接
5. link,MSVC链接器
- /BASE:address:指定输出文件的基地址
- /DEBUG:输出调试模式版本
- /DEF:filename:指定模块定义文件.DEF
- /DEFAULTLIB:library:指定默认运行库
- /DLL:产生DLL
- /ENTRY:symbol:指定程序路口
- /EXPORT:symbol:指定某个符号位导出符号
- /HEAP:指定默认堆大小
- /LIBPATH:dir:指定链接时库搜索路径
- /MAP:产生链接MAP文件
- /NODEFAULTLIB:禁止默认运行库
- /OUT:指定输出文件名
- /RELEASE:已发布版本产生输出文件
- /STACK:指定默认栈大小
- /SUBSYSTEM:指定子系统
6. dumpbin,MSVC的COFF/PE文件查看器
- /ALL:显示所有信息
- /ARCHIVEMEMBERS:显示LIB文件中的所有目标文件列表
- /DEPENDENTS:显示文件的动态链接依赖关系
- /DIRECTIVES:显示链接器指示
- /DISASM:显示反汇编
- /EXPORTS:显示导出函数表
- /HEADERS:显示文件头
- /IMPORTS:显示导入函数表
- /LINENUMBERS:显示行号信息
- /SECTION:name:显示某个段
- /SECTION:显示文件概要信息
- /SYMBOLS:显示文件符号表
- /TLS:显示线程局部存储TLS信息