编译器
来源:互联网 发布:昆明橙子网络 编辑:程序博客网 时间:2024/05/16 00:27
contents:
1.0 编译器之作用
2.0 编译器工作流程
3.0 常用的编译器
4.0 gcc -g
5.0 Readelf指令
1. 编译器之作用:把高级语言翻译成机器语言(即低级语言)。
2. 编译器工作流程:源码--》预处理器--》编译器--》目标代码--》链接器--》可执行程序(executables).
3. 常用的编译器:
1.0 vs是目前做得最好的IDE(集成开发环境)之一,对于初学者来说很容易上手。随着版本的更新,功能逐渐强大起来。
2.0 C++buider具有一个专业C++开发环境所能提供的全部功能:快速、高效、灵活的编译器优化,逐步连接,CP透视,命令行工具等。它实现了可视化的编程环境和功能强大的编程语言(C++)的完美结合。
3.0 Turbo C:使用了一系列下拉式菜单,将文本编辑、程序编译、连接以及程序运行一体化, 大大方便了程序的开发。
4.0 Dev-C++: 是一个Windows环境下C/C++的集成开发环境(IDE),缺点是Debug功能弱。
5.0 G++:linux里的C++编译器。
6.0 Visual C++ 6.0之前的版本对C++的兼容性并不高,7.1之后的还是可以的。
4. gcc -g:-g 选项会使能额外的、只有 GDB 能用的调试信息;这种额外信息能够令 GDB 更好的进行调试。产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
5. Readelf指令:Readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些 信息。elf格式的文件也包括了含有elf文件的目录。elf文件:executables&linkable format。Linux下面,目标文件、共享对象文件、可执行文件都是使用ELF文件格式来存储的。
一个ELF文件中重要的段包括:
.text 段:存储 只读程序
.data 段:存储 已经初始化的全局变量和静态变量
.bss 段:存储 未初始化的全局变量和静态变量,因为这些变量的值为0,所以这个段在文件当中不占据空间
.rodata 段:存储 只读数据,比如字符串常量
-a
--all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I.
-h
--file-header 显示elf文件开始的文件头信息.
-l
--program-headers
--segments 显示程序头(段头)信息(如果有的话)。
-S
--section-headers
--sections 显示节头信息(如果有的话)。
-g
--section-groups 显示节组信息(如果有的话)。
-t
--section-details 显示节的详细信息(-S的)。
-s
--syms
--symbols 显示符号表段中的项(如果有的话)。
-e
--headers 显示全部头信息,等价于: -h -l -S
-n
--notes 显示note段(内核注释)的信息。
-r
--relocs 显示可重定位段的信息。
-u
--unwind 显示unwind段信息。当前只支持IA64 ELF的unwind段信息。
-d
--dynamic 显示动态段的信息。
-V
--version-info 显示版本段的信息。
-A
--arch-specific 显示CPU构架信息。
-D
--use-dynamic 使用动态段中的符号表显示符号,而不是使用符号段。
-x <number or name>
--hex-dump=<number or name> 以16进制方式显示指定段内内容。number指定段表中段的索引,或字符串指定文件 中的段名。
-w[liaprmfFsoR] or
--debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]
显示调试段中指定的内容。
-I
--histogram 显示符号的时候,显示bucket list长度的柱状图。
-v
--version 显示readelf的版本信息。
-H
--help 显示readelf所支持的命令行选项。
-W
--wide 宽行输出
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- 编译器
- [编译器] GCC编译器简介
- 实现轮播图汇总
- Android crash解决集锦
- Android 5.x 权限问题解决方法
- conda: command not found
- Python(六)字典
- 编译器
- python在不同系统下的中文编码问题
- centos7下搭建sentry错误日志服务器
- [kernel 启动流程] (第四章)第一阶段之——dtb的验证
- 图片上传、视频上传
- [网页设计]Ajax、Comet与Websocket
- Service xxx does not have a SELinux domain defined
- HashMap面试题
- Linux中线程同步信号发送与接收总结