前面轉(zhuǎn)載了一篇 如何編譯android gdbserver的博文
創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、丹江口網(wǎng)站定制設(shè)計、自適應品牌網(wǎng)站建設(shè)、H5頁面制作、成都做商城網(wǎng)站、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設(shè)計等建站業(yè)務,價格優(yōu)惠性價比高,為丹江口等各大城市提供網(wǎng)站開發(fā)制作服務。
原文地址如下:
http://sunzeduo.blog.51cto.com/2758509/1381519
本身這篇文章沒有什么問題,按部就班的操作可以生成 gdbserver,但是存在的問題如下:
1 本文編寫時間比較早,實用的arm交叉編譯版本以及gdb版本都比較老了,arm交叉編譯版本是arm-eabi-4.4.3 gdb使用的版本是 7.1.x 。
2 從文章來看是使用下載后android源碼中的ndk來編譯的,這個可以通過其修改了 $MYDROID/ndk/build/tools/prebuilt-common.sh 這個腳本可以看出來,對于沒有下載android源碼的童鞋造成障礙。
3 文中的
git clone git://android.git.kernel.org/toolchain/gdb.git git clone git://android.git.kernel.org/toolchain/build.git
這兩個地址早已經(jīng)無法下載了,又對想自己動手編譯android gdbserver的童鞋造成障礙。
4 在中文搜索引擎里面搜索 android gdb調(diào)試等,絕大多數(shù)均出自
Android - How-to Rebuild gdbserver 這篇文章的翻譯,同樣會存在上面的三個問題。
基于以上的問題,筆者自己動手重新簡化思路,編譯了android gdbserver,降低編譯門檻,供更多的童鞋來了解這方面的知識。
一 需要的前置條件
1 下載 Android NDK 直接從 http://developer.android.com/tools/sdk/ndk/index.html 這個地址下載即可,下載下來就是一個壓縮包,方便使用。 2 下載 gdb源碼 https://github.com/crystax/android-toolchain-gdb 這個下載地址即可
二 添加了兩個腳本 (腳本可以從附件下載)
添加目錄 你下載解壓縮的目錄下的 build/tools 這個目錄下
build-gdbserver_7.3.x.sh prebuilt-common_7.3.x.sh
三 對應規(guī)則
root@ubuntu:~/android/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin# ./arm-linux-androideabi-gdb GNU gdb (GDB) 7.3.1-gg2 root@ubuntu:~/android/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin# ./arm-linux-androideabi-gdb GNU gdb (GDB) 7.3.1-gg2 arm-linux-androideabi-4.6 GNU gdb (GDB) 7.3.1-gg2 arm-linux-androideabi-4.8 GNU gdb (GDB) 7.3.1-gg2
網(wǎng)上流傳的大部分博文,都是gdb 7.1.x的 對應的是 arm交叉編譯的 4.4.3
四 編譯命令
/root/android/android-ndk-r9c/build/tools/build-gdbserver_7.3.x.sh /Disk/CyanogenMod/androidgdb/gdb_build/ /root/android/android-ndk-r9c/ arm-linux-androideabi-4.6 --verbose --build-out=/Disk/CyanogenMod/androidgdb/gdb_build/install --gdb-version=7.3.x --sysroot=/root/android/android-ndk-r9c/platforms/android-19/arch-arm
命令解釋
1 /root/android/android-ndk-r9c/build/tools/build-gdbserver_7.
3
.x.sh
復制過去的腳本
2
/Disk/CyanogenMod/androidgdb/gdb_build/
下載的gdb的路徑
要以下圖的形式組織gdb的目錄,否則腳本執(zhí)行的時候會報錯
3 /root/android/android-ndk-r9c/
下載的ndk解壓縮的路徑
4 arm-linux-androideabi-4.6 使用ndk中帶的arm-linux交叉編譯工具,詳見ndk根目錄下的toolchains目錄
5 --verbose
6 --build-out=/Disk/CyanogenMod/androidgdb/gdb_build/install
gdbserver生成的目錄,如果編譯成功了,則在這個目錄下生成gdbserver
7
--gdb-version=7.3.x
要編譯的gdb版本,對應你下載的gdb源碼包,參考上面的圖
8 --sysroot=/root/android/android-ndk-r9c/platforms/android-19/arch-arm
在編譯gdbserver的時候需要用的頭文件和庫文件
五 編譯錯誤修改
筆者在編譯 gdb 7.3.x的時候出現(xiàn)了編譯錯誤,主要是關(guān)于elf頭文件的問題。
在linux_low.c 中
#ifndef ELFMAG0 /* Don't include <linux/elf.h> here. If it got included by gdb_proc_service.h then ELFMAG0 will have been defined. If it didn't get included by gdb_proc_service.h then including it will likely introduce a duplicate definition of elf_fpregset_t. */ #include <elf.h> #endif
的后面添加下面的代碼
typedef struct { uint32_t a_type; union { uint32_t a_val; } a_un; } Elf32_auxv_t; typedef struct { uint64_t a_type; union { uint64_t a_val; } a_un; } Elf64_auxv_t;
注意,這個僅僅是7.3.x編譯的時候出錯的修改方法,當7.1.x或者其他版本的時候可能也會報錯,需要找到相應的錯誤修改即可
六 編譯成功
七 手機測試
將編譯好的gdbserver 上傳到手機中,賦予可執(zhí)行的權(quán)限,然后運行測試,效果如下圖
八 附件說明
1 build-gdbserver_7.3.x.sh 和 prebuilt-common_7.3.x.sh需要拷貝到 /root/android/android-ndk-r9c/build/tools/ 這個目錄下
2 linux_low.c 需要拷貝到 /Disk/CyanogenMod/androidgdb/gdb_build/gdb/gdb-7.3.x/gdb/gdbserver 這個目錄下
文章標題:自己動手編譯androidgdbserver最新版
地址分享:http://muchs.cn/article38/jpeopp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、微信公眾號、網(wǎng)站設(shè)計、App開發(fā)、手機網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)