在Ubuntu系统中使用 gcc 系列工具是在PC机上使用
arm-linux-gcc 编译的目标 是在 arm CPU上使用
一。安装交叉编译工具链
1. 编译工具怎么获取
1)从官网 http://mirror.hust.edu.cn/gnu/gcc/
通过工具生成 http://crosstool-ng.org/download/crosstool-ng/
2. 交叉编译工具安装
1)$ vi ~/.bashrc 最后一行 添加 export PATH=$PATH:/opt/gcc-4.9.4/bin/ 重启终端 即可生效
2)在终端直接执行 $ export PATH=$PATH:/opt/gcc-4.9.4/bin/ 只在当前终端生效
3) $ sudo vi /etc/profile 最后一行 添加 export PATH=$PATH:/opt/gcc-4.9.4/bin/ 重新登录 即可生效
二。交叉工具链其他工具使用(arm-linux-xxx)
- 查看.elf格式文件:arm-linux-readelf a.out elf 读取文件格式头,内容包括大小端,什么架构,是否是可执行程序(gcc工具直接编译生成的就是elf文件,a.out)
- arm-linux-size a.out 读取各段大小
- 格式转换命令:arm-linux-objcopy -O binary a.out a.bin 砍头操作把调试信息删除
- 反汇编命令:arm-linux-objdump -D -S a.out > a.s (编译需加 -g)
- 列出符号清单:arm-linux-nm a.out(编译需加 -g)
参数说明:大写表示非静态 static 小写
T/t ------- 代码段
D/d ------ 数据段
B/b ------ bss 段
R/r -------- 只读数据段
6. 通过pc中的地址显示行号:arm-linux-addr2line a.out(编译需加 -g)
7. 去掉调试信息(瘦身):arm-linux-strip a.out
8. 提取程序中的字符串:arm-linux-strings a.out
9. 制作库:arm-linux-ar
10. 链接器:arm-linux-ld
链接:https://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html
三.GDB调试:
gdb 执行程序名 ------ 启动调试
start单步执行程序 : start
break 打断点 : b 行号 ---- 例子:b 23
info 获取内容: 获取断点编号: info b
delete删除断点: d 编号
list 显示程序内容 : l
next单步执行: n
connect 继续执行: c
print 打印变量值: p 变量 --例子: p num
display 追踪某个变量值: display num 一直显示for循环中打印某个变量的变化
info 获取追踪变量的编号 : info display
undisplay 取消追踪的变量: undisplay 编号
进入函数体内部: s 函数名
跳出单次循环: u
Finish跳出当前的函数: finish
把for循环中条件变量 i 设置成 10 : set var i =10 相当于把i的循环条件执行了10次
quit退出gdb : q