jni实例一

73 篇文章 1 订阅
21 篇文章 0 订阅

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程序。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值