android-ndk静态编译,用ndk-build编译NDK程序

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;标准库

gabi++, stlport, gnustl这三种在android-ndk-19后已经不再使用了。

libstdc++不支持STL标准库。

静态库c++_static导致生成程序太大,很少使用。所以最常用的还是c++_shared,也就是libc++_shared.so。

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

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值