Linux平台Java调用so库-JNI使用例子

原创 2015年07月08日 18:41:28

首先,编写一个Java文件,包含有native方法

public class MyJni {
    public native void display();

    public native double sum(double x, double y);

    public static void main(String[] args) {

    }

}

其次,将此Java文件编译成.h文件
javah MyJni
执行完此命令,会在目录下生产一个MyJni.h文件

第三,编写一个.c文件,引入刚才的头文件

#include <jni.h>
#include "MyJni.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_MyJni_display(JNIEnv *env,jobject obj){

    printf("Hello JNI");
    return;
}

JNIEXPORT jdouble JNICALL Java_MyJni_sum(JNIEnv *env,jobject obj,jdouble a,jdouble b){

    return a+b;
}

第四,将.c文件编译成.o,再重新转换成.so或者.dll文件
gcc -fPIC -D_REENTRANT -I JDK路径/jdk1.8/include -I JDK路径/jdk1.8/include/linux -c MyJni.c
上面的命令会将C文件编译成.o文件。
gcc -shared Test.o -o libtest.so
上面的命令就能将.o文件编译成.so文件了。

在刚才的java方法中测试一下

public class MyJni {

    static {
        System.load("绝对路径/libtest.so");
    }

    //使用jni的关键字native
    //这个关键字决定我们那些方法能够在C文件使用
    //只须声明,不必实现
    public native void display();

    public native double sum(double x, double y);

    public static void main(String[] args) {
        MyJni myJni = new MyJni();
        System.out.print(myJni.sum(1, 1));
        System.out.print("\n");
        myJni.display();
    }

}

Linux平台Java调用so库-JNI使用例子

1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数。 如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如/home/s...
  • rocgege
  • rocgege
  • 2017年02月28日 09:04
  • 3045

Linux平台Java调用so库-JNI使用例子

1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数。 package net.wangliping public class He...
  • caiwenfeng_for_23
  • caiwenfeng_for_23
  • 2015年04月09日 15:31
  • 2937

java jni 调用.so动态库

最近要用到JNI调用动态库,原来根本没接触过有没有,完全听不懂别人说的啥啊,自己鄙视自己一把。 从别的部门同事那里拿来的源码都不会用,于是就学习了一下如何从c文件生成.so文件,再供java...
  • u013774543
  • u013774543
  • 2015年01月06日 11:09
  • 2899

Linux平台Java调用so库-JNI使用例子

Linux平台Java调用so库-JNI使用例子 1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数。 如果源程序是包含在packa...
  • pengjin1985
  • pengjin1985
  • 2012年04月17日 11:59
  • 331

Linux平台Java调用so库-JNI使用例子

首先,编写一个Java文件,包含有native方法public class MyJni { public native void display(); public native d...
  • zhuguorong11
  • zhuguorong11
  • 2016年08月31日 08:49
  • 387

Linux平台使用JNI的例子 Java调用so

1.确保gcc编译器已安装2.编写HelloJNI.java代码,用native声明需要用C实现的函数。如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如~/Desktop/com...
  • my8688
  • my8688
  • 2011年05月17日 00:05
  • 345

Linux平台Java调用so库-JNI使用例子

1.确保gcc编译器已安装 2.编写HelloJNI.java代码,用native声明需要用C实现的函数。 package net.wangliping public class He...
  • caiwenfeng_for_23
  • caiwenfeng_for_23
  • 2015年04月09日 15:31
  • 2937

Linux平台使用JNI的例子 Java调用so

1.确保gcc编译器已安装2.编写HelloJNI.java代码,用native声明需要用C实现的函数。如果源程序是包含在package里的话,应该建立同样的文件夹结构,比如~/Desktop/com...
  • my8688
  • my8688
  • 2011年05月17日 00:05
  • 648

linux平台java调用so动态库

实现将一个自己编写的Hello.c文件打包成libHello.so动态库,并通过gcc编译工具实现用一个test.c程序调用libHello.so和自定义头文件Hello.h的过程。 具体程序代...
  • liufaqst
  • liufaqst
  • 2017年03月21日 18:00
  • 742

关于JNI的使用(实战linux平台下java调用本地c语言方法)

1. 创建需要调用本地方法的JAVA源文件,本文以NativeTest类为例,源代码如下: public class NativeTest { private native int ma...
  • tufei8438
  • tufei8438
  • 2011年08月19日 16:03
  • 400
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux平台Java调用so库-JNI使用例子
举报原因:
原因补充:

(最多只允许输入30个字)