aj3*_*423 2 gdb gdbserver android-debugging
我正在64位linux上工作,需要为我的aarch64 Android手机构建gdbserver。NDK中有预构建的gdbserver ,但它使用NDK包中的python,而不是使用我的系统python,我无法安装其他python插件。
如何找到需要哪个--target和参数?我尝试了和 google 之类的“build gdbserver aarch64”或“gdbserver configure android”,但没有找到 aarch64 Android 的任何答案。--host./configure--help
对于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
Run Code Online (Sandbox Code Playgroud)
...
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.
Run Code Online (Sandbox Code Playgroud)
also tried:
Run Code Online (Sandbox Code Playgroud)
make CC=arm-none-eabi-gcc CXX=arm-none-eabi-g++
or CC=aarch64-linux-android28-clang CXX=aarch64-linux-android28-clang++
Run Code Online (Sandbox Code Playgroud)
But same result.
Run Code Online (Sandbox Code Playgroud)
从其他地方得到答案,放在这里以防有人想做同样的事情。
wget ftp://sourceware.org/pub/gdb/releases/gdb-9.1.tar.gz
Run Code Online (Sandbox Code Playgroud)
tar xzvf gdb-9.1.tar.gz
Run Code Online (Sandbox Code Playgroud)
cd gdb-9.1
Run Code Online (Sandbox Code Playgroud)
#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
Run Code Online (Sandbox Code Playgroud)
此修改对于构建 Android 是必要的,因为 Android 系统库已经定义了 struct Elf32_auxv_t 和 Elf64_auxv_t 。(详细信息请参阅: https: //github.com/android/ndk/issues/1008)
linux_request_interrupt: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);
}
Run Code Online (Sandbox Code Playgroud)
这修复了错误“gdbserver not Handling Ctrl+C”,详细信息位于: https://sourceware.org/bugzilla/show_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 install
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
sdkmanager --install "ndk;21.0.6113669" --sdk_root=.
Run Code Online (Sandbox Code Playgroud)
cd ~/android/ndk/21.0.6113669/
./build/tools/make-standalone-toolchain.sh \
--toolchain=aarch64-linux-android-4.9 \
--install-dir=~/android/ndk_21
Run Code Online (Sandbox Code Playgroud)
此步骤在以下位置创建独立工具链:~/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
Run Code Online (Sandbox Code Playgroud)
如果出现与“source-highlight”相关的错误,请添加--disable-source-highlight到configure标志中。
构建完成后,gdbserver位于:gdb/gdbserver/gdbserver
| 归档时间: |
|
| 查看次数: |
6675 次 |
| 最近记录: |