0x00 本文参考

我们在开发NDK的时候,经常需要使用C++ STL库开发,那么这些库是如何和我们的程序链接的呢?

0x01 C++ STL分类

注意:libstdc++.so是android源码工程下,~/android-4.2.2/bionic/libstdc++目录下的代码生成的。这个so,在手机中位于/system/lib/libstdc++.so,每个进程都会默认加载一份。可以通过cat /proc/pid/maps来查看到。

这些静态链接库和动态链接库都位于哪呢?

答案是位于ndkpat/sources/cxx-stl。我们截图看下这个目录:

我们可以清晰的对照两张图。libstlport_shared.so和libstlport_static.a都在这个目录的libs/armeabi中。

那么我们如何静态或者动态链接某个库呢?

答案是:

在Application.mk中,加入:APP_STL := stlport_static,表示需要静态链接libstlport_static.a。最后在工程目录libs/armeabi目录中,只会生成要编译的so,由于这个so静态链接了libstlport_static.a,所以文件的大小会比较大。

如果加入:APP_STL := stlport_shared,表示需要动态链接libstlport_shared.so。最后在工程目录libs/armeabi目录,会生成要编译的so(体积较小,没有静态链接)和libstlport_shared.so。这两个so都会被放入/data/data/packageName/libs目录下。在使用中,需要同时System.loadlibrary两个so。

0x02 在NDK中使用第三方库

0x03 Android源码环境中使用stl

stl源码位于~/android-4.2.2/external/stlport目录下。

LOCAL_SHARED_LIBRARIES := \

libstlport \

LOCAL_C_INCLUDES := \

bionic \

external/stlport/stlport \

bionic是需要的,里面虽然不是标准库文件,但标准库文件可能需要它。

另外,并不是所有的STL功能都能用,只是常用的一部分。

android jni stl,Android NDK中C++ STL库动态和静态链接相关推荐

  1. NDK中C++标准库、STL的配置;Include其他头文件

    原文: Android学习笔记--NDK中C++标准库.STL的配置:Include其他头文件 1.STL的使用,以stlport为例 官方的说法是只需要在Application.mk文件中添加如下一 ...

  2. android jni不适用ndk,Android NDK编译之undefined reference to 'JNI_CreateJavaVM'

    利用Android NDK编译动态库,在C文件中调用了两个JNI函数:JNI_GetDefaultJavaVMInitArgs和JNI_CreateJavaVM.编译的时候始终报以下错误: XXX: ...

  3. android jni framework,Android Framework层的JNI机制(二)

    Java框架层中有很多地方使用JNI机制,每一个部分的框架层代码,都可能有与之对应的JNI库.先了解Java框架层的组成,继续看一下JNI在框架层中的使用. Java框架层的组成 Java框架层的实体 ...

  4. Android JNI for Android Studio 2.2 or higher

    点击浏览 官网说明 (要翻墙) 安装插件 需要打开SDK Manager 菜单栏 Tools>Android>SDK Manager 点击切换到 SDK Tools 选项卡 勾选 LLDB ...

  5. android jni总结,Android JNI总结.doc

    Android JNI总结 JNI总结 JNI有多重实现方式,一下会详细讲解多种方式: 1 应用级 用eclipse构建一个应用程序,JNITest1. Xml代码 < ?xml version ...

  6. android jni语法,Android NDK中的JNIEXPORT和JNICALL

    基本上是一个Windows问题,如果你看看oracle Java jdk附带的文件jni_md_win32.h这是宏定义: /* * @(#)jni_md.h 1.14 03/12/19 * * Co ...

  7. android jni gbk,Android之NDK编码转(UTF8-GBK)

    基于NDK下的编码转换,当然是直接调用C/C++下的实现效率更高,下面介绍2种方案(不建议通过JNI调用JAVA的实现,尽管这样也能实现编码的转换). 1. 采用Android系统自带的libicuu ...

  8. android jni release,Android NDK 设置编译模式debug和release

    原文:http://stackoverflow.com/questions/14564918/android-ndk-release-build Unless you have created the ...

  9. android jni skia,Android NDK 调用Skia进行底层绘图

    Skia是Android的底层的图形库,最近看了一下参考了了网上的例子最初是这样做的就是从上层直接传一个Canvas再在底层获取它 运行的时候老是不成功,不过可以画图形,比如线.矩形等,最后在网上查了 ...

  10. android jni bitmap,android – 如何使用JNI位图操作来帮助避免...

    注意:这是一个有点旧的代码.对于最新的,请查看github上的项目页面. JNI / Android.mk LOCAL_PATH := $(call my-dir) #bitmap operation ...

最新文章

  1. Virtex-6系列FPGA的CLB
  2. 组策略 从入门到精通 (一) 组策略的还原与备份和汇入
  3. SAP Cloud for Customer里的HTML Mashup的JavaScript编程功能
  4. log4j在web中的使用
  5. Android 编码规范:(五)避免创建不必要的对象
  6. AS数据库自动备份的DOS语句
  7. 将web项目部署到阿里云服务器上
  8. 计算机论文的主要研究方法有哪些,9大实用的论文研究方法盘点
  9. 2021年校招,最值得加入的互联网公司有哪些?
  10. 染色法判定二分图的算法
  11. php checkbox多选框默认选中的实现。
  12. ionic开发记账软件《易跟金》
  13. 电工基础知识-配电室安全须知
  14. altera系列fifo和ram
  15. linux arena参数设置,topcoder Arena配置及基本使用方法
  16. AutoSar DaVinci Developer工具的基本介绍
  17. java中的smm,java毕业设计_springboot框架的基于SMM框架的局域网文件共享及检索系统...
  18. Thinking in uml 大象 系统用例
  19. openwrt固件提取方法
  20. CListCtrl::SortItems的用法

热门文章

  1. dbv连oracle,oracle工具:DBV的用法
  2. 硬盘测试工具 CrystalDiskMark 8.0.0 正式版
  3. win10“无法完成操作,因为文件包含病毒或潜在的垃圾软件”解决办法
  4. weka mysql_weka连接mysql数据库
  5. Spark机器学习(一)—Spark相关
  6. excel自定义功能区图标_自定义Excel条件格式图标
  7. 地理信息安全在线培训考试系统题库-单选题
  8. MapGIS矢量数据的误差校正
  9. php 微信签到功能,微信小程序实现签到功能
  10. 前端Js处理百度地图和腾讯/高德地图经纬度不同的转换问题