jni实例一
来源:互联网 发布:买卖域名好赚吗 编辑:程序博客网 时间:2024/06/03 20:26
1。编写一个java程序,包含一个native函数。
package cn.vicky.jni;/** * * @author Vicky.H */public class HelloWorld { // 1.need a native method public native void sayHello(); }
2。编译该java程序。
[root@localhost src]# tree
.
`-- cn
`-- vicky
`-- jni
`-- HelloWorld.java
3 directories, 1 file
[root@localhost src]# javac cn/vicky/jni/HelloWorld.java
[root@localhost src]# tree
.
`-- cn
`-- vicky
`-- jni
|-- HelloWorld.class
`-- HelloWorld.java
3 directories, 2 files
[root@localhost src]# javah cn.vicky.jni.HelloWorld
[root@localhost src]# tree
.
|-- cn
| `-- vicky
| `-- jni
| |-- HelloWorld.class
| `-- HelloWorld.java
`-- cn_vicky_jni_HelloWorld.h
3 directories, 3 files
如以上操作,将会生成一个对应的C/C++头文件。
3。编写C/C++动态文件库。
这里依旧使用netbeans+centos编写.so格式的动态文件库。工程目录如下:
其中cn_vicky_jni_HelloWorld.h为javah命令生成的头文件。jni.h以及jni_md.h为:
[root@localhost src]# cd /usr/java/default/include/
[root@localhost include]# tree
.
|-- classfile_constants.h
|-- jawt.h
|-- jdwpTransport.h
|-- jni.h
|-- jvmti.h
`-- linux
|-- jawt_md.h
`-- jni_md.h
1 directory, 7 files
拷贝对应的文件获得。
编写头文件的实现:cn_vicky_jni_HelloWorld_impl.cpp
#include "cn_vicky_jni_HelloWorld.h"#include <iostream>using namespace std;JNIEXPORT void JNICALL Java_cn_vicky_jni_HelloWorld_sayHello (JNIEnv *env, jobject obj){ cout << "hello world" << endl;}
是一个简单的,输出“hello world”的程序。生成程序:获得libjni_01_cpp.so的动态链接库。为了只用该动态链接库,我们需要将其复制到/usr/lib文件下。
4。java调用libjni_01_cpp.so
继续编写HelloWorld.java程序
package cn.vicky.jni;/** * * @author Vicky.H */public class HelloWorld { // 1.need a native method public native void sayHello(); public static void main(String[] args) { System.loadLibrary("jni_01_cpp"); new HelloWorld().sayHello(); }}
[vicky@localhost src]$ javac cn/vicky/jni/HelloWorld.java
[vicky@localhost src]$ tree
.
|-- cn
| `-- vicky
| `-- jni
| |-- HelloWorld.class
| `-- HelloWorld.java
`-- cn_vicky_jni_HelloWorld.h
3 directories, 3 files
[vicky@localhost src]$ java cn.vicky.jni.HelloWorld
hello world
程序执行,完成。删除测试使用的动态链接库:
[root@localhost src]# rm /usr/lib/libjni_01_cpp.so
rm:是否删除 一般文件 “/usr/lib/libjni_01_cpp.so”? y
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上为linux下的jni使用,至于windows下,大体相同,当生成jni_01_cpp.dll文件后,我们需要将jni_01_cpp.dll所在目录的地址,宝贝到windows环境的path下。如:
然后,使用运行HelloWorld程序。
- jni实例一
- jni实例一
- Android JNI实例代码(一)
- Android JNI实例代码(一)
- Android JNI实例代码(一)
- Android JNI实例代码(一)
- Android JNI实例代码(一)
- 比较优雅的JNI实例一
- [Android 内核开发] JNI 开发实例(一)
- jni实例
- jni实例
- 图文教程vs2008+eclipse开始jni教程实例(一)
- android4.0 USB Camera实例(一)JNI层
- jni学习实例(一)-a7105模块驱动之driver
- 基于Android2.3.5系统:JNI与HAL实例解析[一]
- JNI技术实践小结(实例一枚)
- Android Jni 多线程 蓝牙串口收发 实例 一
- android4.0 USB Camera实例(一)JNI层
- java.util.ResourceBundle使用详解
- android 阻止屏幕变暗
- QTP的知识
- ubuntu 常用命令
- ASP.NET深入浅出系列4- 也谈委托和事件
- jni实例一
- IIS 上传文件大小配置步骤(默认200K)
- usaco Electric Fence
- 页面之间传参数
- Software & Tools
- Oracle 迁移与审计相关表和索引的表空间
- 架构分享--微博架构
- maicaidao
- 将MATLAB的M-脚本转换为可执行程序