美文网首页Android
用ndk-build编译NDK程序

用ndk-build编译NDK程序

作者: RonZheng2010 | 来源:发表于2019-05-24 16:50 被阅读0次

    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
    

    参考资料

    深入理解使用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

    相关文章

      网友评论

        本文标题:用ndk-build编译NDK程序

        本文链接:https://www.haomeiwen.com/subject/ivlnzqtx.html