技术宅的结界

 找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 938|回复: 0
收起左侧

如何使用ndk编译和调试android linux程序

[复制链接]

271

主题

445

帖子

4760

积分

用户组: 真·技术宅

UID
2
精华
61
威望
148 点
宅币
3583 个
贡献
131 次
宅之契约
0 份
在线时间
614 小时
注册时间
2014-1-25
发表于 2016-2-6 08:32:02 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有帐号?立即注册→加入我们

x
网上都是用cygwin和ndk共同编译的,在我看来是一种冗余,下面是我的最新方法,一个ndk搞定
包括linux/windows 2大平台上 使用命令行/eclipse 进行 编译/调试

Native Development Kit(本地开发包)是使用c/c++开发android app的工具集,使用原因有以下2点:
        在游戏和物理模拟方面最大限度利用设备性能
        重用已有c/c++代码

android-linux程序交叉编译:
以linux x86为例,NDK下载地址http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86.bin,修改可执行权限并执行:
chmod a+x android-ndk-r10c-darwin-x86_64.bin
./android-ndk-r10c-darwin-x86_64.bin
gedit /etc/environment        设置环境变量:
PATH=”/usr/ndk/android-ndk-r10ePATH”
NDK="/usr/ndk/android-ndk-r10e"(必须)
SYSROOT="$NDK/platforms/android-21/arch-arm"(必须)
TOOL_CHAIN_DIR="$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86"
CC="$TOOL_CHAIN_DIR/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT"
至此,可以用$CC进行命令行编译,接下来建立交叉编译环境,先建立独立工具集(可选):
$NDK/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/usr/myndktool/tool
安装eclipse for c/c++
建立一个c工程,
#include <stdio.h>
#include <stdlib.h>

int main(void) {
        puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
        return 0;
}

采用交叉编译环境,工程属性设置为(若未建立独立工具集则按实际路径):
C/C++ Build->BuilderSettings 选External builder(确保安装了gnu make)
C/C++ Build->Tool Chain Editor 选Cross Gcc & Gnu Make Builder
C/C++ Build->Settings->Cross Settings
        Prefix->arm-linux-androideabi-
        Path->/usr/myndktool/tool/bin/
至此,可以用eclipse进行交叉编译,编译出的文件可以直接在linux arm手机运行


以上是linux系统的情况,下面以win8.1 x64为例介绍eclipse(命令行类似)交叉编译android linux arm程序方法,NDK下载地址http://dl.google.com/android/ndk ... -windows-x86_64.exe,安装后设置好PATH,NDK,SYSROOT环境变量
下载eclipse for c/c++,下载gnu make for windows的make.exe,添加到NDK目录中
C/C++ Build->BuilderSettings 选External builder
C/C++ Build->Tool Chain Editor 选Cross Gcc & Gnu Make Builder
C/C++ Build->Settings->Cross Settings
        Prefix->arm-linux-androideabi-
        Path->D:\TDDOWNLOAD\android-ndk-r10e\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin
C/C++ Build->Settings->Cross GCC Compiler->Miscellaneous->Other flags添加
--sysroot=D:\TDDOWNLOAD\android-ndk-r10e\platforms\android-21\arch-arm
C/C++ Build->Settings->Cross GCC Linker->Miscellaneous->Linker flags添加
--sysroot=D:\TDDOWNLOAD\android-ndk-r10e\platforms\android-21\arch-arm -fPIE –pie -fuse-ld=bfd
至此,可以用eclipse进行交叉编译,编译出的文件可以直接在linux arm手机运行


通用调试方法:
        先在android中配置gdb服务端:
        adb push %NDK%\prebuilt\android-arm\gdbserver\gdbserver /system/bin
        chmod 777 /system/bin/gdbserver
        adb push test.out /system/bin
        chmod 777 /system/bin/test.out
        gdbserver :2345 /system/bin/test.out(若附加调试则提供进程号)
        adb forward tcp:2345 tcp:2345
        然后在本地为eclipse配置gdb:
        工程右键->Debug As->Debug Configurations->C/C++ Remote Application新建新调试
                Debugger->GDB debugger-> arm-linux-androideabi-gdb.exe
        ok,下断点断下

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|技术宅的结界 ( 滇ICP备16008837号|网站地图

GMT+8, 2019-2-19 14:41 , Processed in 0.097521 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表