一、环境:
PC操作系统:Ubuntu 14.04 LTS
mips gcc 版本:gcc version 4.9.2 (Buildroot 2015.05)
要编译的gdb版本:gdb-8.3
GDB源码下载地址:http://ftp.gnu.org/gnu/gdb/
二、配置及编译
1、下载后解压
2、配置configure
创建一个 build_mips 文件夹用于配置及编译。
配置参数如下:
指定交叉编译的GCC、LD、AR、相应的运行平台、安装位置
../configure \
CC="/opt/4.9.2_0.9.33/bin/mipsel-linux-uclibc-gcc" \
CFLAGS="-g -std=gnu99 -lpthread" \
CXX="/opt/4.9.2_0.9.33/bin/mipsel-linux-uclibc-g++" \
CXXFLAGS="-std=c++11" \
LD="/opt/4.9.2_0.9.33/bin/mipsel-linux-uclibc-ld" \
LDFLAGS="-L/opt/4.9.2_0.9.33/lib" \
AR="/opt/4.9.2_0.9.33/bin/mipsel-linux-uclibc-ar" \
--host="mipsel-buildroot-linux-uclibc" \
--target="mipsel-buildroot-linux-uclibc" \
--prefix="/home/hrx/gdb-8.3/build_mips/output" \
--disable-werror
注:host和target可以通过指定编译器 -v查看。
3、编译
执行 make
问题一:…/gdb/dwarf-index-write.c:704:32: error: ‘log2’ is not a member of ‘std’
这个问题应该是由于这个gdb版本使用的log2这个函数没有,可以将log2改成log。
报错:
处理:
问题二: 对‘_obstack_free’未定义的引用**
这个问题应该是由于所使用的gcc和gdb版本不匹配引起的,解决方法有2个。一个是换更早的gdb版本,二是把gdb源码中的
** _obstack_free** 改成 obstack_free 再编译试试。
报错:
在gdb-8.3源码中是 ** _obstack_free**
而我使用的编译工具却是 obstack_free
处理:
将 include/obstack.h、libiberty/obstack.c、libiberty/ChangeLog、libiberty/obstacks.texi 里面的 _obstack_free 全部改成 obstack_free。
4、安装
结果:
三、测试
将gdb文件拷贝到开发板测试一下,可以用。
多线程应用也可以调试。