##ndk 编译gdb
- 生成工具链:
$NDK/build/tools/make-standalone-toolchain.sh --platform=android-23 --arch=arm64 --install-dir=$NDK/out/toolchain - 设置一个env.sh 用的时候source
export PATH=$NDK/out/toolchain/bin:$PATH
export CC=“aarch64-linux-android-gcc -pie -fPIE --sysroot=$NDK/out/toolchain/sysroot”
export CXX=“aarch64-linux-android-g++ -pie -fPIE
–sysroot=$NDK/out/toolchain/sysroot”
export CXXFLAGS="-lstdc++" - 配置gdb
mkdir out
./configure --host=aarch64-linux-android --target=aarch64-linux-android --prefix=$PWD/out
make
make install
出错处理:
1.类型冲突 Elf32_auxv_t Elf64_auxv_t
linux-low.c:116:3: error: typedef redefinition with different types (‘struct Elf32_auxv_t’ vs ‘struct Elf32_auxv_t’)
linux-low.c:131:3: error: typedef redefinition with different types (‘struct Elf64_auxv_t’ vs ‘struct Elf64_auxv_t’)
这个在ndk的elf.h 中已经有定义,直接注释掉gdb/gdbserver/linux-low.c 中的定义
2. setpwent 没定义
complete.c:2060: error: undefined reference to ‘setpwent’
readline/complete.c 中假如宏判断包含
#if defined(HAVE_GETPWENT)
setpwent ();
#endif
3. 运行的时候提示缺库 libc++_shared.so
在ndk 目录下find . -name libc++_shared.so
arm arm64 找对应的push 到板子上/system/lib
4. 运行段错误
手动加打印 发现在signals-state-save-restore.c --> save_original_signals_state 挂掉
直接注释掉internal_error