嵌入式学习小组
直播中

李志静

7年用户 1439经验值
私信 关注

编译的三种类型是什么?

编译的三种类型是什么?
ARM_Linux制作嵌入式远程调试工具

回帖(1)

马龙

2021-12-24 16:42:30
环境准备




  • 虚拟机需配置好指定的交叉编译工具链
  • 确保 虚拟机 <----> PC系统 <----> arm开发板 两两 ping 通
  • 源码下载

http://ftp.gnu.org/gnu/gdb/


  • 解压

tar -zxvf gdb-8.1.tar.gz
编译的三种类型




  • 编译PC平台普通程序
    该情况最为常见,编译平台与运行平台、执行平台为同一环境。
    ./configure 该指令相当于 :
    ./configure --build=x86_64-gnu-linux --host=x86_64-gnu-linux --target=x86_64-gnu-linux ps:这里为什么是 x86_64-gnu-linux 呢? 请看 gcc -v。

  • 交叉编译工具链类型的程序
    这类程序特殊的地方在于,它虽然在虚拟机(x86-64-linux)上运行,但目标平台确是arm。
    本文介绍的 gdb 正是这种类型。
    ./configure --target=aarch64-linux-gnu 该指令相当于 :
    ./configure --build=x86_64-gnu-linux --host=x86_64-gnu-linux --target=aarch64-linux-gnu ps:这里我的交叉编译工具链为 aarch64-linux-gnu-gcc。
  • 交叉编译嵌入式程序
    制作运行于嵌入式平台的编译工具,本文我们需要编译的 gdbserver 就是这种类型。
    ./configure --host=aarch64-linux-gnuCC=aarch64-linux-gnu-gcc 该指令相当于 :
    ./configure --build=x86_64-gnu-linux --host=aarch64-linux-gnu --target=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc

补充




  • build
    运行编译工具链的平台,也就是正在执行编译操作的平台。
  • host
    可执行程序将运行的平台。如果未指定此参数,则和 --build 相同。如果 --host 和 --build 不同,是 交叉编译;否则是 普通编译
  • target
    可执行程序将处理的平台。如果未指定此参数,则和 --host 相同。一般来说,程序运行在什么平台,处理的就是什么平台,此参数值和 --host 参数相同,不需显式指定,所以通常不会关注到此参数。但在制作交叉编译工具 (如 gcc、gdb 等) 这种特殊情况下,此值和 --host 不同。
  • program-prefix
    指定将被加到所安装程序的名字上的前缀.例如,使用 --program-prefix=arm-linux 来configure,编译的 gdb 文件名为 arm-linux-gdb 。
  • prefix
    编译的时候用来指定程序存放路径 。不指定 prefix,可执行文件默认放在 /usr/local/bin,库文件默认放在 /usr/local/lib,配置文件默认放在 /usr/local/etc。其它的资源文件放在 /usr /local/share。

注意:以下编译过程中出现错误,建议将文件删除后,重新解压,再编译!
编译gdb

cd /gdb8.1./configure --target=aarch64-linux-gnusudo makemake install 编译完成后,生成可执行文件在 /gdb8.1/gdb 中:

如果我们在 QtCreator 中使用,需要将其加到 Kits 中,这里可以看到其类型:

编译gdbserver

清除后重新编译,要求 GCC 的前缀和 host、target 要保持一样。
cd /gdb8.1/gdb/gdbserver./configure --target=aarch64-linux-gnu --host=aarch64-linux-gnusudo make CC=aarch64-linux-gnu-gcc 使用




  • 先将 gdb 加入到 Kits 中,在 QtCreator 添加 Linux 通用设备并通过 Test。

  • 将编译好的 gdbserver 移至 arm开发板。
  • 配置好 gdb 后编写测试 demo,并打断点,调试模式生成可执行文件(arm-sdk)。将可执行文件移动至 arm 开发板。
  • arm 板中开启 gdbserver,监听 6666 端口。
    ./gdbserver :6666 ./testapp
  • 那么在虚拟机中如何开启调试呢?



举报

更多回帖

发帖
×
20
完善资料,
赚取积分