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平台使用JNI的例子 Java调用so

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

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

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

linux平台java调用so动态库

实现将一个自己编写的Hello.c文件打包成libHello.so动态库,并通过gcc编译工具实现用一个test.c程序调用libHello.so和自定义头文件Hello.h的过程。 具体程序代...

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

1. 创建需要调用本地方法的JAVA源文件,本文以NativeTest类为例,源代码如下: public class NativeTest { private native int ma...

Linux平台下使用JNI

1 首先创建一个简单的java类: public class Hello {  static  {   try   { //此处即为本地方法所在链接库名    System.loadL...

Android平台下JNI调用第三方so库

Android平台下JNI调用第三方so库
  • wfei101
  • wfei101
  • 2017年06月29日 22:01
  • 100

Java调用不支持JNI的Linux so文件

Java调用不支持JNI的Linux so文件
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux平台Java调用so库-JNI使用例子
举报原因:
原因补充:

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