首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为android构建gdb和gdbserver

为android构建gdb和gdbserver
EN

Stack Overflow用户
提问于 2020-04-01 14:52:33
回答 3查看 4.3K关注 1票数 2

我在64位linux上工作,需要构建gdbserver,因为我的aarch64 Android phone.There是在NDK中预先构建的gdbserver,但是它在NDK包中使用python,而不是使用我的系统python,我不能安装其他plugins。

如何找到--target--host参数是./configure所必需的?我尝试了--help,谷歌喜欢“构建gdbserver aarch64”或"gdbserver配置android",但是aarch64 Android没有找到任何答案。

对于gdb,我可以使用./configure --enable-targets=all,但是gdbserver使用什么呢?是否有所有可用参数的“列表”?

下面是我如何构建gdbserver

  1. 下载64-linux包,解压缩并将其添加到PATH,添加环境变量CC=arm-none-eabi-gccCXX=arm-none-eabi-g++,使可执行文件在PATH中可用
  2. 我试过所有这些:
代码语言:javascript
复制
    ../configure  
    ../configure --host=aarch64-linux             --target=aarch64-linux-androideabi
    ../configure --host=aarch64-linux-androideabi --target=aarch64-linux
    ../configure --host=aarch64-linux-androideabi --target=aarch64-linux-androideabi
  1. 使,结果是:
代码语言:javascript
复制
    ...
    make[3]: Nothing to be done for 'all'.
    make[3]: Leaving directory '/opt/gdb-9.1/gdb/gdbserver/build/build-libiberty-gdbserver/testsuite'
    make[2]: Leaving directory '/opt/gdb-9.1/gdb/gdbserver/build/build-libiberty-gdbserver'
    make[1]: Leaving directory '/opt/gdb-9.1/gdb/gdbserver/build'
    make: *** No rule to make target '../alloc.c'.  Stop.
代码语言:javascript
复制
also tried:
代码语言:javascript
复制
    make CC=arm-none-eabi-gcc CXX=arm-none-eabi-g++
    or CC=aarch64-linux-android28-clang CXX=aarch64-linux-android28-clang++
代码语言:javascript
复制
But same result.
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-11 12:58:36

从其他地方得到答案,放在这里以防有人想做同样的事。

  1. 下载gdb源代码:
代码语言:javascript
复制
   wget ftp://sourceware.org/pub/gdb/releases/gdb-9.1.tar.gz
  1. 提取文件:
代码语言:javascript
复制
 tar xzvf gdb-9.1.tar.gz
  1. 移到源文件夹中
代码语言:javascript
复制
 cd gdb-9.1
  1. 编辑文件gdb/gdbserver/linux-low.c:
  • 4.1。添加两行:第107行和第122行,内容如下
代码语言:javascript
复制
#define HAVE_ELF32_AUXV_T  //  Line 107 (Added)
#ifndef HAVE_ELF32_AUXV_T

#define HAVE_ELF64_AUXV_T // Line 122 (Added)
#ifndef HAVE_ELF64_AUXV_T

这种修改对于构建Android是必要的,因为Android系统库已经定义了struct Elf32_auxv_t和Elf64_auxv_t。

  • 4.2。修改函数linux_request_interrupt
代码语言:javascript
复制
static void
linux_request_interrupt (void)
 {
   /* .... */
-  kill (-signal_pid, SIGINT); // replace this line with next 3 lines
+  int r = kill (-signal_pid, SIGINT);
+  if (r != 0)
+      kill (signal_pid, SIGINT);
 }

这修复了"gdbserver不处理Ctrl+C“的错误,详见:bug.cgi?id=18772

  1. 为linux构建gdb:
代码语言:javascript
复制
sudo apt-get install build-essential \
  gcc g++ make autogen m4 \
  bison gettext libpython-dev

mkdir build-linux

cd build-linux/

../configure --enable-targets=all --with-python=/usr/bin/python

make -j4

sudo make install
  1. 为android构建gdbserver:
  • 6.1。下载android
代码语言:javascript
复制
cd ~

mkdir android

cd android

wget https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip

unzip commandlinetools-linux-6200805_latest.zip

export PATH=$PATH:~/android/tools/bin
  • 6.2。安装Ndk
代码语言:javascript
复制
sdkmanager --install "ndk;21.0.6113669" --sdk_root=.
  • 6.3。为NDK创建独立工具链
代码语言:javascript
复制
cd ~/android/ndk/21.0.6113669/

./build/tools/make-standalone-toolchain.sh \ 
--toolchain=aarch64-linux-android-4.9 \
--install-dir=~/android/ndk_21

此步骤在以下位置创建独立工具链:~/android/ndk_21

  • 6.4。为android配置和构建gdbserver
代码语言:javascript
复制
cd ~/gdb-9.1

mkdir build-android

cd build-android

export PATH=$PATH:~/android/ndk_21/bin

CC=aarch64-linux-android-gcc ../configure \
    --target=aarch64-linux-android \
    --host=aarch64-linux-android \
     LDFLAGS="-static-libstdc++"

make -j4

如果获得与“源高亮”相关的错误,请将--disable-source-highlight添加到configure标志中。

构建完成后,gdbserver位于: gdb/gdbserver/gdbserver

票数 4
EN

Stack Overflow用户

发布于 2020-04-10 18:47:50

获得这一点的最简单方法是通过Android附带的NDK,例如使用Android。进入Android中的NDK并导航到ndk-bundle/prebuilt/android-arm64/gdbserver/gdbserver;这将为aarch64 (arm64)提供预先构建的gdbserver可执行文件。除了用于aarch64之外,您还可以在ndk/预构建中找到其他预构建的gdbserver可执行文件。

票数 1
EN

Stack Overflow用户

发布于 2020-12-30 13:47:55

要在termux中安装gdb,只需运行:

代码语言:javascript
复制
pkg install gdb

它将安装gdb和gdbserver。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60973768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档