NDK学习笔记

本文深入解析了NDK工具包的两大核心功能:编译C、C++代码及提供so库和头文件。通过运行ndk-build脚本,利用GNUMake进行编译,同时介绍了如何选择不同的C++运行时库以支持标准C++库、C++异常和RTTI。此外,还概述了Android原生库的使用步骤。
摘要由CSDN通过智能技术生成

NDK是一个工具包,详细可看google的NDK介绍文档。

工具包主要包括以下两个模块:

  • 编译c、c++的工具
  • 提供so库和头文件供编译使用

1. 编译c、c++的工具

编译c、c++代码,主要是运行ndk-build脚本

  • 脚本位置。下载NDK后,可以发现在NDK目录下有一个ndk-build脚本。

在这里插入图片描述

$GNUMAKE -f <ndk目录位置>/build/core/build-local.mk
<parameters>

其中$GNUMAKE 指向 GNU Make 3.81更新版本。也就是说,使用ndk-build脚本编译c、c++时,最终是使用make工具去编译c和c++代码的。make执行的文件为build-local.mk, 该文件包含了编译c、c++的项目、编译器和编译链接的库等配置信息。

2 提供so库和头文件供编译使用

提供了Android平台相关的so库、c、c++标准so库和so库的头文件。

  1. 提供c、c++标准src文件、so库和头文件。google C++库文档。这些库的位置为:

在这里插入图片描述

  • Android 平台提供很小的 C++ 运行时支持库 (libstdc++)。但该库不包括以下支持:
    • 标准 C++ 库支持(几个无关紧要的标头除外)
    • C++ 异常支持
    • RTTI 支持
  • 如果你想支持标准 C++ 库支持、C++ 异常支持和RTTI 支持, 可使用以下库,NDK也提供了这些so。要使用这些so库,可在 Application.mk文件中配置(只能为应用选择一个运行时,并且只能在 Application.mk 中选择)例如:
 //库名称为下表中的 名称,如gnustl_static
 APP_STL := 库名称
名称说明功能
libstdc++(默认)默认最小系统 C++ 运行时库。不适用
gabi++_staticGAbi++ 运行时(静态)。C++ 异常和 RTTI
gabi++_sharedGAbi++ 运行时(共享)。C++ 异常和 RTTI
stlport_staticSTLport 运行时(静态)。C++ 异常和 RTTI;标准库
stlport_sharedSTLport 运行时(共享)。C++ 异常和 RTTI;标准库
gnustl_staticGNU STL(静态)。C++ 异常和 RTTI;标准库
gnustl_sharedGNU STL(共享)。C++ 异常和 RTTI;标准库
c++_staticLLVM libc++ 运行时(静态)。C++ 异常和 RTTI;标准库
c++_sharedLLVM libc++ 运行时(共享)。C++ 异常和 RTTI;标准库
  1. Android原生库。google NDK原生API文档。Android NDK 提供一组随新的 Android API 版本后续发布而逐渐增加的原生标头和共享库文件。这些库的位置为:

在这里插入图片描述

  • Android原生库包含以下库

    • C 库
    • C++ 库
    • Android Log库
    • ZLib 压缩库
    • 动态链接器库
    • OpenGL ES 1.x Library
    • OpenGL ES 2.0 库
    • jnigraphics库
    • EGL
    • OpenSL ES
    • OpenMAX AL
    • OpenSL ES
    • OpenGL ES 3.0
    • OpenGL ES 3.1
  • 使用Android原生库分两个步骤

    • 步骤一:在C或C++代码中添加与您想使用的库关联的头文件。这些库的头文件路径大部分位于<ndk-bundle目录>/sysroot/usr/include/android这个目录中。
    • 步骤二:通知构建系统您的原生模块需要在加载时链接库。例如,如需链接 链接到 /system/lib/liblog.so,则向 Android.mk 文件添加以下行:
      LOCAL_LDLIBS := -llog
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值