android无法生成 gdbserver,自己编译Android gdbserver决运行 gdbserver时 Segmentation fault 问题.doc...

253b171540df25e1b84436cbe50dfc72.gif自己编译Android gdbserver决运行 gdbserver时 Segmentation fault 问题.doc

自己编译Android gdbserver(解决运行 gdbserver时 Segmentation fault 问题)来源333电影网 转载注明一、引言 使用Android 预装 gdbserver 调试 动态库时出现,Segmentation fault错误。不得不使用现有编译链重新编译一份gdbserver。多谢Android - How-to Rebuild gdbserver这篇文章,参考这篇文章我的解决过程如下。 这里要强调一点下面编译sysroot时sysroot的目标路径,和编译gdbserver时指定的sysroot路径,一定要是用绝对路径。我编译过程中,曾因未使用绝对路径浪费不少精力。二、开发环境Ubuntu 11.04 编译通过的Android 2.3 源码三、解决过程1、因已经有了Android 2.3源码,省去下载源码并编译的漫长过程。设置Android源码目录为环境变量ANDROID_SRCsimbasimba-Vostro-3400 export ANDROID_SRC/home/simba/neptune/android_2.32、下载gdb源码,并打补丁simbasimba-Vostro-3400 mkdir gdb_buildsimbasimba-Vostro-3400/neptune/gdb_src git clone stylefont-size13px; diff git a/gdb-7.1.x/gdb/gdbserver/Makefile.in b/gdb-7.1.x/gdb/gdbserver/Makefile.in index 5bf82e2488bfb6 100644 - a/gdb-7.1.x/gdb/gdbserver/Makefile.in b/gdb-7.1.x/gdb/gdbserver/Makefile.in -176,13 176,13 clean-info gdbserverEXT OBS ADD_DEPS CDEPS rm -f gdbserverEXT - CC-LD INTERNAL_CFLAGS INTERNAL_LDFLAGS -o gdbserverEXT OBS - GDBSERVER_LIBS XM_CLIBS CC-LD INTERNAL_CFLAGS -o gdbserverEXT OBS GDBSERVER_LIBS XM_CLIBS INTERNAL_LDFLAGS gdbreplayEXT GDBREPLAY_OBS rm -f gdbreplayEXT - CC-LD INTERNAL_CFLAGS INTERNAL_LDFLAGS -o gdbreplayEXT GDBREPLAY_OBS - XM_CLIBS CC-LD INTERNAL_CFLAGS -o gdbreplayEXT GDBREPLAY_OBS XM_CLIBS INTERNAL_LDFLAGS Put the proper machine-specific files first, so M-. on a machine specific routine gets the one for the correct machine. diff git a/gdb-7.1.x/gdb/gdbserver/linux-arm-low.c b/gdb-7.1.x/gdb/gdbserver/linux-arm-low.c index 54668f87a78cce 100644 - a/gdb-7.1.x/gdb/gdbserver/linux-arm-low.c b/gdb-7.1.x/gdb/gdbserver/linux-arm-low.c -43,10 43,7 void init_registers_arm_with_neon void; define PTRACE_SETWMMXREGS 19 endif -ifndef PTRACE_GETVFPREGS - define PTRACE_GETVFPREGS 27 define PTRACE_SETVFPREGS 28 -endif static unsigned long arm_hwcap; 打补丁simbasimba-Vostro-3400/gdb_build cd gdb/simbasimba-Vostro-3400/gdb_build/gdb patch -p1 ./gdb_patch.patch3、下载build源码simbasimba-Vostro-3400/gdb_build git clone sysrootsimbasimba-Vostro-3400/neptune/build_src cd build/simbasimba-Vostro-3400/gdb_build/build ./build-sysroot.sh ANDROID_SRC/out/target/product/imx51_bbg/HOME/gdb_build/sysroot注意此处sysroot的目标目录一定要是用绝对路径,否则sysroot不能正常生成,之后编译gdbserver时会报错。4.修改编译脚本备份并修改build-gdbserver.sh simbasimba-Vostro-3400/gdb_build/build cd simbasimba-Vostro-3400/gdb_build cp ANDROID_SRC/ndk/build/tools/build-gdbserver.sh ANDROID_SRC/ndk/build/tools/build-gdbserver.sh_backsimbasimba-Vostro-3400/gdb_build gedit ANDROID_SRC/ndk/build/tools/build-gdbserver.sh以下红字部分为添加内容,目的是注释掉部分代码NOT_NEEDED Remove libthread_db to ensure we use exactly the one we want.rm -f BUILD_SYSROOT/usr/lib/libthread_db*rm -f BUILD_SYSROOT/usr/include/thread_db.hif NOTHREADS yes ; then Were going to rebuild libthread_db.o from its source that is under sources/android/libthread_db and place its header and object file into the build sysroot. LIBTHREAD_DB_DIRANDROID_NDK_ROOT/sources/android/libthread_db/gdb-GDB_VERSION if -d LIBTHREAD_DB_DIR ; then dump ERROR Missing directory LIBTHREAD_DB_DIR exit 1 fi Small trick, to avoid calling ar, we store the single object file with an .a suffix. The linker will handle that seamlessly. run cp LIBTHREAD_DB_DIR/thread_db.h BUILD_SYSROOT/usr/include/ run TOOLCHAIN_PREFIX-gcc sysrootBUILD_SYSROOT -o BUILD_SYSROOT/usr/lib/libthread_db.a -c LIBTHREAD_DB_DIR/libthread_db.c if 0 ; then dump ERROR Could not compile libthread_db.c exit 1 fifiNOT_NEEDED备份并修改prebuilt-common.sh simbasimba-Vostro-3400/gdb_build cp ANDROID_SRC/ndk/build/tools/prebuilt-common.sh ANDROID_SRC/ndk/build/tools/prebuilt-common.sh_backsimbasimba-Vostro-3400/gdb_build gedit ANDROID_SRC/ndk/build/tools/prebuilt-common.sh将 get_toolchain_install echo 1/toolchains/TOOLCHAIN/prebuilt/HOST_TAG 修改为 get_toolchain_install echo 1/prebuilt/HOST_TAG/toolchain/TOOLCHAIN 5.编译gdbserversimbasimba-Vostro-3400/gdb_build ANDROID_SRC/ndk/build/tools/build-gdbserver.sh HOME/gdb_build ANDROID_SRC arm-eabi-4.4.3 verbose build-outHOME/gdb_build/install gdb-version7.1.x sysrootHOME/gdb_build/sysroot注意此处一定要是用绝对路径指定sysroot的目录6.目标文件位于/gdb_build/install目录下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值