`
assertmyself
  • 浏览: 28628 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

java native 接口开发流程

阅读更多
java native 接口开发流程

1.编写native接口
Hello.java
 
package com;

        class Hello {

             private native void print(); //定义native接口,,该方法为 对象内的,,所以执行慢
             private static native int get();
             private static native void set(int value);

             public static void main(String[] args) {

                 new Hello().print(); //非静态

                 System.out.println("--------static   return and parme----------");
                 System.out.println(get()); //静态
                 set(123);
                 System.out.println(get()); //静态

             }

             static {

                 System.loadLibrary("Hello");//加载 libHello.so

             }

         }


2.编译java源文件
在源文件目录执行 javac Hello.java

3.生成native头文件
在 classpath目录 执行命令 javah   com.Hello;生成 com_Hello.h文件

/* DO NOT EDIT THIS FILE - it is machine generated */
            #include <jni.h>
            /* Header for class com_Hello */

            #ifndef _Included_com_Hello
            #define _Included_com_Hello
            #ifdef __cplusplus
            extern "C" {
            #endif
            /*
             * Class:     com_Hello
             * Method:    print
             * Signature: ()V
             */
            JNIEXPORT void JNICALL Java_com_Hello_print
              (JNIEnv *, jobject);

            /*
             * Class:     com_Hello
             * Method:    get
             * Signature: ()I
             */
            JNIEXPORT jint JNICALL Java_com_Hello_get
              (JNIEnv *, jclass);


4.实现 .h文件
一个示例
 #include <jni.h>

        #include <stdio.h>

        #include "com_Hello.h"


        int i = 0;
        JNIEXPORT void JNICALL Java_com_Hello_print(JNIEnv *env, jobject obj)

        {

            printf("Hello World!/n");

            return;

        }



        JNIEXPORT jint JNICALL Java_com_Hello_get(JNIEnv *env, jclass jc)
        {
            return i;
        }

        JNIEXPORT void JNICALL Java_com_Hello_set(JNIEnv *env, jclass jc, jint j)

        {
            printf("set the value: sss");
            i = j;
        }


5.编译dll 或者so共享库
linux环境:.so文件 且命名为 libXXX.so
编译.o文件:gcc -fPIC -D_REENTRANT -I /usr/lib/jvm/java-1.7.0-openjdk.x86_64/include -I /usr/lib/jvm/java-1.7.0-openjdk.x86_64/include/linux -c com_Hello.c
链接.o文件 生成 so动态链接库:gcc -shared com_Hello.o -o libHello.so


window环境:.dll文件 xxx.dll
gcc -Wl,--add-stdcall-alias -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o Hello.dll com_Hello.c

如果是c++程序 需要使用g++编译指令


6.添加到path

linux :export LD_LIBRARY_PATH=.  仅当前shell有效,可以添加到path

window:直接放在 jdk bin目录下

  • so.rar (4.7 KB)
  • 下载次数: 0
分享到:
评论

相关推荐

    跨平台移动端开发NativeScript.zip

    NativeScript可以将其所支持平台上的任意原生API作为目标,包括传感器接口API和用Objective C,Java或.NET编写的第三方库。UI组件是原生的,UI事件由在JavaScript代码中声明的原生处理程序处理,如View....

    JNI接口开发

    java调用native方法流程主要有两步: 1. 找到对应的方法 a) 动态绑定时load本地库时完成映射关系,运行时查找对应方法 native方法中实现JNI_OnLoad,返回JNI的版本号;如果native不实现,则由虚拟机生成默认实现。在...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java开源包1

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包4

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包101

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包11

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包6

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包9

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包5

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包8

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包10

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包3

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    唯品会Java开发手册.zip

    结合唯品会的内部经验,参考《阿里巴巴Java开发手册》《Clean Code》、《Effective Java》等重磅资料进行了大幅定制,包含核心基础类库VJKit ,问题排查工具VJMap 和 VJTop 三部分。 开发工具在软件开发生命周期中...

    Java与Kotlin开发实用工具包.zip

    开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在...总之,开发工具极大地提升了软件工程师的工作效率,保证了开发过程中的准确性与一致性,同时也促进了团队合作,使得软件开发更系统化、规范化和工业化。

    java面试宝典

    22、我们在web 应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 10 23、String 和StringBuffer 的区别? 10 24、String, StringBuffer StringBuilder 的区别。 10 25、...

    java开源包2

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

    java开源包7

    Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...

Global site tag (gtag.js) - Google Analytics