JNI 里使用STL

JNI里的c或者c++ 调用stl 的时候,比如引入map头文件:

#include <map>

在cygwin使用NDK编译的时候,会提示:

fatal error:map: No such file

解决方法:

就是在jni目录下就是 Android.mk的同级目录下新建一个 Application.mk 文件(如果没有这个文件就新建一个)

里面指定 APP_STL

如下:

APP_STL := stlport_static

时间: 2024-11-19 06:41:26

JNI 里使用STL的相关文章

导出类成员里含有stl对象

How to export an instantiation of a Standard Template Library (STL) class and a class that contains a data member that is an STL object Summary This article discusses how to perform the following tasks: Export an instantiation of a Standard Template

jni里找不到刚添加的C++函数

使用NDK开发,用到了JNI来连接C++和JAVA. 当C++方增加了一个新函数,jni访问此函数,eclipse会提示找不到改函数,然后前面打个红叉叉表示语法错误,从而阻碍了编译和运行. 当我选择清理和重新编译后,问题还是存在. NDK第一次编译时将C++的头文件预处理掉并缓存起来了,但是一般的清理不会清理这些头文件.所以你新增的C++函数,eclipse找不到. 解决方法就是来一次彻底的清理和重新编译.修改一下Android.mk,好让NDK重新生成相关的makefile,然后重新编译即可.

JNI 详解

JNI其实是Java Native Interface的简称,也就是java本地接口.它提供了若干的API实现了和Java和其他语言的通信(主要是C&C++).也许不少人觉得Java已经足够强大,为什么要需要JNI这种东西呢?我们知道Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的,所以在多数时间我们是不需要JNI的,但是假如你遇到了如下的三种情况之一呢? 你的Java代码,需要得到一个文件的属性.但是你找遍了JDK帮助文档也找不到相关的API. 在本地还有一个别的系统,不

较具体的介绍JNI

JNI事实上是Java Native Interface的简称,也就是java本地接口.它提供了若干的API实现了和Java和其它语言的通信(主要是C&C++).或许不少人认为Java已经足够强大,为什么要须要JNI这样的东西呢?我们知道Java是一种平台无关性的语言,平台对于上层的java代码来说是透明的,所以在多数时间我们是不须要JNI的,可是假如你遇到了例如以下的三种情况之中的一个呢? 你的Java代码,须要得到一个文件的属性.可是你找遍了JDK帮助文档也找不到相关的API. 在本地另一个

JNI编程(二) —— 让C++和Java相互调用(1)

自己在外面偷偷的算了下,又有将近两个月没更新过blog了.趁着今天有兴致,来更新JNI编程的第二篇文章.在第一篇里,大概介绍了JNI的特点.用途和优劣.并且做一个最简单的JNI的例子,不过说实话那个例子在实际的开发中没有太大的价值,实际开发中所需要的JNI程序要远远比那个复杂.所以这一篇就来介绍下如何通过JNI实现java和C++的相互通信,来满足实际开发的需要. 所谓”通信“,其实说白了无非也就是我们所说的方法调用,在上一篇的例子里介绍了如何在Java中调用本地的DLL,其实在Java代码中,

JNI编程(二) —— 让C++和Java相互调用(2)

3.getRamdomOrder() 这个方法会从backend得到一个随机的Order对象(抱歉这里“Random”拼错了),然后再调用java中相应的通知方法来通知foreground.getRamdomOrder方法没有参数,但是所对应的C++方法里却有两个参数,一定有人会不解.其实细心的朋友一定会发现,JNI里所有对应Java方法的C++ 方法都会比Java方法多两个参数,第一个参数是我们很熟悉的JNIEnv*指针,第二个参数有时是jobject有时是个jclass.针对这第二个参数在这

eclipse调用jni

http://blog.chinaunix.net/uid-27003388-id-3235189.html 1.       在Eclipse里创建一个Java project(jni_test): 在src里创建一个package,取名为jni; 然后在jni里创建一个带有native声明的方法的java类(helloworld.java),文件具体内容如下: package jni;   public class helloworld { static{ System.loadLibrar

C++标准库和stl区别

C++库目录:开发工具和语言-visual studio文档-visual C++-参考信息-库参考-standard C++ library C#库目录:C#使用.NET Framework 类库..NET开发-.NET Framework SDK-.NET Framwork-.NET Framework 类库 C++标准库的内容分为10类: C1.语言支持 C2.输入/输出 C3.诊断 C4.一般工具 C5.字符串 C6.容器 C7.迭代器支持 C8.算法 C9.数值操作 C10.本地化 又

IDA还原JNI函数方法名

在android调试中,你会经常见到这种类型的函数: 首先是一个指针加上一个数字,比如v3+676.然后将这个地址作为一个方法指针进行方法调用,并且第一个参数就是指针自己,比如(v3+676)(v3…).这实际上就是我们在JNI里经常用到的JNIEnv方法.因为Ida并不会自动的对这些方法进行识别,所以当我们对so文件进行调试的时候经常会见到却搞不清楚这个函数究竟在干什么,因为这个函数实在是太抽象了.解决方法非常简单,只需要对JNIEnv指针做一个类型转换即可.比如说上面提到v3指针,我们选中后