元始天尊 发表于 2016-2-6 08:32:02

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

网上都是用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-r10e:$PATH”
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/android-ndk-r10e-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,下断点断下
页: [1]
查看完整版本: 如何使用ndk编译和调试android linux程序