我在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
CC=arm-none-eabi-gcc,CXX=arm-none-eabi-g++,使可执行文件在PATH中可用 ../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 ...
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.also tried: make CC=arm-none-eabi-gcc CXX=arm-none-eabi-g++
or CC=aarch64-linux-android28-clang CXX=aarch64-linux-android28-clang++But same result.发布于 2020-04-11 12:58:36
从其他地方得到答案,放在这里以防有人想做同样的事。
wget ftp://sourceware.org/pub/gdb/releases/gdb-9.1.tar.gz tar xzvf gdb-9.1.tar.gz cd gdb-9.1#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。
linux_request_interruptstatic 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。
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 installcd ~
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/binsdkmanager --install "ndk;21.0.6113669" --sdk_root=.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
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
发布于 2020-04-10 18:47:50
获得这一点的最简单方法是通过Android附带的NDK,例如使用Android。进入Android中的NDK并导航到ndk-bundle/prebuilt/android-arm64/gdbserver/gdbserver;这将为aarch64 (arm64)提供预先构建的gdbserver可执行文件。除了用于aarch64之外,您还可以在ndk/预构建中找到其他预构建的gdbserver可执行文件。
发布于 2020-12-30 13:47:55
要在termux中安装gdb,只需运行:
pkg install gdb它将安装gdb和gdbserver。
https://stackoverflow.com/questions/60973768
复制相似问题