依赖工具termcap编译
下载地址:
https://mirrors.sjtug.sjtu.edu.cn/gnu/termcap/termcap-1.3.1.tar.gz
交叉编译:
./configure --host=xxxx --target=xxx --prefix=xxxx//install
交叉编译且install后,可以在编译gdb时指定外部连接库,也可以直接放进交叉工具链路径
cp -r install/include/termcap/*.h /xxxxx/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/include/
cp install/lib/*.a /xxxx/sysroots/cortexa9hf-neon-poky-linux-gnueabi/usr/lib/
gdb交叉编译
源码下载自行百度,不同的平台可能有些版本难编译过,此时可以多换几个版本编译,笔者用过7.10/7.6.1/7.8.1
./configure --target=xxx --host=xxx --prefix=$(pwd)/../gdb_out/ CC="xxx-gcc --sysroot=libc路径" CFLAGS=" -mfloat-abi=soft"
host/target
如果填arm时报错host/target无法识别可以填写交叉工具链的前几个字符,例如交叉工具链为arm-linux-gnueabihf-时,则可以填写arm-linux-gnueabihf, host/target指定的值是有要求的,一般截取交叉工具链前几个字段。一般来说填写arm就可以了。
CC
该变量的赋值需要携带sysroot的路径,如果交叉工具链安装路径中有sysroot目录则填写sysroot即可,没有的话则填写交叉工具链的libc目录即可
-mfloat-abi
一般来说这个字段不需要指定,如果有配置出错且涉及该问题时可以指定该字段。
其他
1.如果编译过程中出现错误,直接屏蔽错误即可。
2.使用交叉工具链自带的gdb分析core文件,不过该方法只有在应用进程出错时产生信号才能使用。core的产生需要执行如下两个配置。
ulimit -c unlimited //设置core文件大小, 设置为unlimited时不限制xore文件大小
echo "./core.file" > /proc/sys/kernel/core_pattern //文件名字和路径随便定义
在虚拟机下按照如下执行即可进入gdb调试模式,core.MRApp.804为core文件
arm-linux-xx-gdb MRApp core.MRApp.804
kill -s SEGV $$
该命令可以测试core文件是否产生,SEGV为信号(kill -l查看系统所有信号),可以换其他信号,测试完要重新配置core文件生成环境。
3.-fsanitize=address -fno-omit-frame-pointer -fsanitize=leak
该编译选项可以检测内存问题,该方法比gdb更为好用,出错误时可以把函数调用过程和内存信息打印出来,详细解释自行百度,遗憾的是有些平台可能不支持。