Android

用ndk-build编译NDK程序

2019-05-24  本文已影响0人  RonZheng2010

1. 配置Android NDK编译环境

1.1 配置NDK

首先下载NDK软件包,并解压:

$ cd ~
$ wget https://dl.google.com/android/repository/android-ndk-r19c-linux-x86_64.zip
$ unzip android-ndk-r19c-linux-x86_64.zip
$ ls android-ndk-r19c

设置NDK的环境变量:

export PATH=~/android-ndk-r19c:$PATH

1.2. 编译程序

进入工程目录,设置NDK_PROJECT_PATH,让NDK知道工程在什么位置:

cd myproject
export NDK_PROJECT_PATH=.

执行ndk-build编译:

ndk-build

指定选项 NDK_LOG=1 可以看ndk-build执行的具体过程。如使用哪个编译器,使用了哪个标准库,等等。

ndk-build NDK_LOG=1

2. C++库

2.1 有哪些C++库

Android使用的C++库有如下几种:

名称 说明 功能
libstdc++ 默认最小系统 C++ 运行时库
gabi++_static GAbi++ 运行时(静态) C++ 异常和 RTTI
gabi++_shared GAbi++ 运行时(共享) C++ 异常和 RTTI
stlport_static STLport 运行时(静态) C++ 异常和 RTTI;标准库
stlport_shared STLport 运行时(共享) C++ 异常和 RTTI;标准库
gnustl_static GNU STL(静态) C++ 异常和 RTTI;标准库
gnustl_shared GNU STL(共享) C++ 异常和 RTTI;标准库
gnustl_static GNU STL(静态) C++ 异常和 RTTI;标准库
c++_static LLVM libc++ 运行时(静态) C++ 异常和 RTTI;标准库
c++_shared LLVM libc++ 运行时(共享) C++ 异常和 RTTI;标准库

2.2 指定C++库

默认情况下,ndk-build使用libstdc++,如果要使用c++_shared,可以在Application.mk中,使用APP_STL变量指定:

$ cat jni/Application.mk 
APP_ABI := armeabi-v7a arm64-v8a
APP_PLATFORM := android-28
APP_STL := c++_shared
APP_BUILD_SCRIPT := build.mk

编译过程中会自动生成libc++_shared.so。

2.3 使用readelf查看模块依赖的库

使用readelf工具可以查看模块依赖哪些库,包括C++库。

$ ~/android-ndk-r19c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-readelf -a myproject

参考资料

深入理解使用ndk-build编译NDK程序
https://www.jianshu.com/p/26275f3d583e

NDK编译——C++ 库支持
https://blog.csdn.net/suningning/article/details/74510591

Android下怎么使用LDD查看依赖库
https://blog.csdn.net/luoyouren/article/details/50561502

上一篇下一篇

猜你喜欢

热点阅读