0 崩溃,崩溃!
应用崩溃,又无从下手的时候,逼着自己交叉编译mdm9x07平台的gdb。
1 环境准备
- mdm9x07 toolchains
- gdb-7.6.tar.gz
- debian 8.1
$ wget https://ftp.gnu.org/gnu/gdb/gdb-7.6.tar.gz
2 配置
将交叉工具链配置到环境变量,例如:
export MDM9X07_PATH=/home/bb/tools/MDM9X07/usr/bin/arm-oe-linux-gnueabi
export PATH=${MDM9X07_PATH}:${PATH}
验证arm-oe-linux-gnueabi-gcc 是否可用
bb@bb:~$ arm-oe-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-oe-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/bb/tools/MDM9X07/usr/bin/arm-oe-linux-gnueabi/../../libexec/arm-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/4.9.2/lto-wrapper
Target: arm-oe-linux-gnueabi
... ... ... ... ...
gcc version 4.9.2 (GCC)
3 工作目录
$ export GDB_SRC=~/workbench/gdb/src
$ export GDB_BUILD=~/workbench/gdb/build
$ mkdir -pv ~/workbench/gdb
$ mkdir $GDB_SRC && mkdir $GDB_BUILD
$ cd $GDB_SRC
$ tar -pxzf gdb-7.6.tar.gz ~/workbench/gdb/src
4 环境变量
export TARGETMACH=arm-oe-linux-gnueabi
export CROSS=arm-oe-linux-gnueabi
export CC=${CROSS}-gcc
export LD=${CROSS}-ld
export AS=${CROSS}-as
另外因为是交叉编译,需要告诉编译器以及链接器查找路径,使用--sysroot=配置:
C 和C++都需要配置,gdb中子模块有用到c++的
export CFLAGS=--sysroot=/home/bb/tools/mdm9607
export CXXFLAGS=--sysroot=/home/bb/tools/mdm9607
5 配置
准备工作完成,开始生成makefile
./configure --with-build-sysroot=/home/bb/tools/mdm9607 --prefix=/home/bb/workbench/gdb/build --host=$TARGETMACH --target=$TARGETMACH --disable-tui
6 汇总编写make.sh
#!/bin/sh
export TARGETMACH=arm-oe-linux-gnueabi
export CROSS=arm-oe-linux-gnueabi
export CC=${CROSS}-gcc
export LD=${CROSS}-ld
export AS=${CROSS}-as
export CFLAGS=--sysroot=/home/bb/tools/me3630/mdm9607
export CXXFLAGS=--sysroot=/home/bb/tools/me3630/mdm9607
./configure --with-build-sysroot=/home/bb/tools/me3630/mdm9607 --prefix=/home/bb/workbench/gdb/build --host=$TARGETMACH --target=$TARGETMACH --disable-tui
7 安装
顺利的话,可编译通过。继续执行安装即可:
make install
在安装目录下能够看到有如下:
bb@bb:~/gdb$ tree ./
├── bin
│ ├── gdb
│ ├── gdbserver
│ └── run
├── include
│ ├── ansidecl.h
│ ├── bfd.h
│ ├── bfdlink.h
│ ├── dis-asm.h
│ ├── gdb
│ │ └── jit-reader.h
│ └── symcat.h
├── lib
│ ├── libarm-oe-linux-gnueabi-sim.a
│ ├── libbfd.a
│ ├── libbfd.la
│ ├── libiberty.a
│ ├── libopcodes.a
│ └── libopcodes.la
└── share
... ... ... ...
53 directories, 86 files
验证文件格式:
bb@bb:~/gdb/bin$ file gdb
gdb: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=5eb891638b2f00228d24f1ecffccbac40be558b0, not stripped
8 问题
不顺利则会出现一些错误,可能有:
- arm-oe-linux-gnueabi-gcc 没有-v 和 -qversion 选项, 去掉
for ac_option in --version -v -V -qversion; do
==>
for ac_option in --version -v; do
- 当前系统无法执行编译后的程序
if { ac_try='./$ac_file'
==>
if { ac_try='file ./$ac_file'
注: 全篇核心在--sysroot配置
网友评论