Linux 环境下java 调用SO

来源:互联网 发布:立林jb2000ii编程 编辑:程序博客网 时间:2024/06/05 05:21

这几天一直在弄linux环境下java调用so文件的问题,网上例子也很多,不过有些细节写的不是很全面,导致我需要参考多方面的实例才能得出结果,现在整理个完整细节版

1 、编写java代码

package net.lu; 
public class HelloJNI{ 
static{ 
System.loadLibrary("HelloJNI"); 
} 
public native static int get(); 
public native static void set(int i);
public static void main(String[] args){ 
HelloJNI test = new HelloJNI(); 
test.set(10);
 System.out.println(test.get()); 
}
2、在HelloJNI.java文件所在目录下编译.java文件。

javac HelloJNI.java

3、生成.h头文件,需要注意的是,要在src目录层生成文件

... src] # javah -jni net.lu.HelloJNI

4、编写.c 文件

#include "net_wangliping_HelloJNI.h"
int i = 0;
JNIEXPORT jint JNICALL Java_net_wangliping_HelloJNI_get(JNIEnv *env, jclass jc)
{
  return i;
}
JNIEXPORT void JNICALL Java_net_wangliping_HelloJNI_set(JNIEnv *env, jclass jc, jint j)
{
  i =
2*j;
}

5、生成.so文件

[root@turbolinux src]# gcc -I/usr/java/jdk1.5.0_13/include/linux -I/usr/java/jdk1.5.0_13/include -fPIC -shared -o libHelloJNI.so HelloJNI.c

6、eclipse 调用SO文件

出错很正常,如


最简单的方式,调用 System.out.println(System.getProperty("java.library.path"));

得到/usr/java/jdk1.5.0_13/jre/lib/i386,将SO文件放在该目录下

运行java程序,输出了由C语言函数计算出的结果