JNI 学习笔记
2012-08-10 21:17
190 查看
/article/4857494.html
1,先把c语言的编译环境搭建好,windows下这里使用mingw
1,mingw具体配置
配置环境变量:打开:“我的电脑->属性->高级->环境变量->系统变量”编辑如下系统变量:
变量名 变量值
PATH C:\MinGW\bin;
LIBRARY_PATH C:\MinGW\lib
C_INCLUDEDE_PATH C:\MinGW\include
CPLUS_INCLUDE_PATH C:\MinGW\include\c++\3.4.2;C:\MinGW\include\c++\3.4.2\mingw32;C:\MinGW\include\c++\3.4.2\backward;C:\MinGW\include
盘符自己搞定吧…
2,开始第一个JNI
1,JNI的原理图
直接到官方教程那里截的….
2,开始使用JNI
?1,先把写好的类转换成.class文件
2,把.class文件转换成头文件,成功的话就会在src目录下看到.h文件了
打开后你会看到
?
英语原文 | 我的理解… | 例子 |
the prefix Java_ | 转换后的native方法全部以Java_为前缀 | Java_kg_tom_MyJni_display |
a mangled fully-qualified class name | 接着以类的全名标识(包名+类名) | Java_kg_tom_MyJni_display |
an underscore (“_”) separator | 以下划线为分隔符(“_”) | Java_kg_tom_MyJni_display |
mangled method name | 最后就是方法的名称 | Java_kg_tom_MyJni_display |
for overloaded native methods, two underscores (“__”) followed by the mangled argument signature | 这个理解不能:直译的话就是对已经读取过的native方法,用双下划线(“__”)标注 | 没找到 |
3,就是写我们的C文件了
?4,windows下编译成dll文件,linux下编译成so文件.这里只说windows下的
1,java基础
找到我们的jdk文件夹,然后打开其中的include文件夹,就会看到一些头文件,看下关键的Jni.h头文件在不在,在的话,继续,不在自行下载一个新的jdk…
2,把C文件编译成dll文件
我们这里使用mingw….你会用VC6也可以用VC6编译…gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -Id:/java/include –Id:/java/include/win32 -shared -o sum.dll java_sum_native.c
命令 | 简单介绍 |
-Wall -D_JNI_IMPLEMENTATION_ | 把我们的C文件编译成dll |
-Wl,--kill-at | 因为mingw默认是用@来进行分隔,会导致JNI机制不能读取,所以要删掉.. mingw官网解释 |
Id:/java/include –Id:/java/include/win32 | 导入我们用的的jni需要的头文件…盘符,文件夹自己修改 |
-shared -o | 输出配置,第一个参数为我们输出的名字(随便起),第二个参数为我们的C文件(随便起) |
没出什么提示的话就是成功的了…
4,运行我们的JNI
1,用eclipse的话,我们把编译好的dll放到项目根目录,注意不是代码根目录
?貌似java本身的输出,优先级比较高??
2,补充一下:
1,我们要运行我们编译的C文件,是与我们创建的类是必须一起存在,例如:我把MyJni.java删掉,然后另起一个Hello.java能不能直接调用dll中的方法呢?那是肯定不行的..因为,jni需要类名来进行查找
3,JNI映射的数据类型
这里内容比较多…以后用的才记录相关文章推荐
- Android JNI学习笔记(二)-动态注册native函数
- [JNI]学习笔记系列:一
- Android(java)学习笔记255:JNI之JNI概念
- Android(java)学习笔记259:JNI之NDK开发步骤
- Android NDK学习笔记7-JNI的NIO操作
- JNI 学习笔记系列(二)
- Android JNI学习笔记(五)-这两篇,足够了解jni
- NDK学习笔记:jni数据类型转换
- Android JNI(java native interface) 学习笔记
- jni入门学习笔记(一)
- Android JNI学习笔记——so文件动态加载
- 深入安卓JNI,INIT,ZYGOTE——极客学院学习笔记
- JNI 学习笔记
- JNI 学习笔记
- JNI学习笔记 C++传递结构体、String、数组对象给JavaC++传递结构体、String、数组对象给Java
- JNI 学习笔记系列(二)
- ICTCLAS2011_JNI学习笔记-ICTCLAS_SetPOSmap及ICTCLAS_ParagraphProcess接口
- JNI学习笔记(二)——JNI
- 段小白的JNI编程学习笔记
- JNI 学习笔记系列(二)