【Linux C++】Linux平台x86系统下,交叉编译arm-linux的GDB和GDBServer,实现在Linux平台的QTCreator中图形化界面调试

操作环境

本机:虚拟机中安装了 centos6.10-i386的操作系统
在这里插入图片描述
目标机:arm-linux X86
在这里插入图片描述

涉及的工具及版本:

  1. gcc&g++ 4.4.7
    yum install gcc 及 yum install gcc-c++ 安装即可

  2. python 2.7.9 QTCreator需要,用于图形化调试,编译gdb时需要添加<--with-python>选项
    下载源码 python 2.7.9.tar.gz后。解压后,在解压路径。执行:./configure 再执行:make &&make install,即可

  3. gdb 7.6.1 下载源码gdb-7.6.1.tar.gz;用于编译GDB和GDBServer

  4. arm-fsl-linux-gnueabi-g++ 交叉编译gun工具链,前缀为arm-fsl-linux-gnueabi
    在这里插入图片描述

编译gdb及gdbserver

  • 编译gdb
    gdb是在本机运行的
#解压下载的源码,进入解压路径
#--prefix= 表示 后面执行 make install 之后 安装的最终目录
#--with-python 表示增加python支持,否则无法用QTCreator进行图形化调试
#--target 表示编译哪个平台的交叉编译工具链;
#其中arm-fsl-linux-gnueabi为交叉编译工具链前缀
./configure --prefix=/opt/arm-linux-gdb-7.6.1 --with-python --target=arm-fsl-linux-gnueabi
#编译,-j表示强制使用多少个cpu
make -j16
#安装到之前的 --prefix 参数配置中
make install
  • 编译gdbserver
    gdbserver是在目标机器运行的,静态编译完成后,只需要放入目标机器即可
#进入gdbserver文件夹
cd gdb/gdbserver
#CFLAGS && CXXFLAGS 表示编译参数,这里想要静态的
#--host 表示交叉编译的程序要在什么平台下运行,后接交叉编译工具链前缀
./configure --prefix=/opt/arm-linux-gdb-7.6.1 CFLAGS=-static CXXFLAGS=-static --target=arm-fsl-linux-gnueabi --host=arm-fsl-linux-gnueabi
make && make install
  • 压缩生成的可执行程序
#进入之前--prefix的目录的bin文件夹
cd <install path>/bin
#strip -安装gcc的时候就会安装上。用于给文件脱掉外衣,具体就是从特定文件中剥掉一些符号信息和调试信息,使文件变小
#1.用本机交叉编译工具链的strip程序。压缩需要在本机运行的程序
strip arm-fsl-linux-gnueabi-gdb arm-fsl-linux-gnueabi-run 
#2.用目标机交叉编译工具链的strip 压缩需要在目标机器运行的程序
arm-fsl-linux-gnueabi-strip arm-fsl-linux-gnueabi-gdbserver 

配置QTCreator

  • 添加QTCreator的gdb
    QTCreator菜单栏->工具->选项,然后如下图配置。
下图第4步中的,Path填写刚才安装目录的bin文件夹的gdb可执行文件即可

【Linux C++】Linux平台x86系统下,交叉编译arm-linux的GDB和GDBServer,实现在Linux平台的QTCreator中图形化界面调试_第1张图片

  • QTCreator添加调试设备
    第5步填写的你之前生成的gdbserver放在目标机器的哪个位置,例如:/mnt/user/test/arm-fsl-linux-gnueabi-gdbserver【Linux C++】Linux平台x86系统下,交叉编译arm-linux的GDB和GDBServer,实现在Linux平台的QTCreator中图形化界面调试_第2张图片
  • QTCreator的套件设置,选择刚才添加的gdb项以及设备项
    【Linux C++】Linux平台x86系统下,交叉编译arm-linux的GDB和GDBServer,实现在Linux平台的QTCreator中图形化界面调试_第3张图片
  • 配置将编译好的程序或者想要放入的文件放入目标机器 在工程的.pro文件添加响应的指令
#将目标文件拷贝到目标机器;/mnt/user/test为远程机器的路径
target.path = /mnt/user/test
INSTALLS+=target
#将其他文件自动拷贝到目标机器。
#documentation为自定义的名字,.path配置目标路径;.files配置需要拷贝的文件
#/mnt/user/test为需要放进去文件的目标机器的路径
#test.txt为需要拷贝的文件
documentation.path = /mnt/user/test
documentation.files += test.txt
INSTALLS+=documentation

【Linux C++】Linux平台x86系统下,交叉编译arm-linux的GDB和GDBServer,实现在Linux平台的QTCreator中图形化界面调试_第4张图片

拷贝文件在运行时进行。debug应用程序时,如果用相对路径,会找不到。

你可能感兴趣的:(其他)