您的位置:首页 > 运维架构 > Linux

Linux中关于JAVA调用C生成的.so动态链接库

2016-03-23 11:20 666 查看
第一步.首先,我们先写个JAVA类:

public class HelloJNI {

static {

System.loadLibrary("HelloWorld");  //链接库的名字

}

public native static void setNum(int num);  //链接库的方法

public native static int get();//链接库的方法

public static void main(String[] args) {

HelloJNI test = new HelloJNI();

test.setNum(666);
System.out.println(test.get());
}
}


第二步.进行编译: javac HelloJNI.java

第三步.再编译生成.h文件: javah -jni HelloJNI



上图为生成的.h文件。可以看出我们在JAVA类中写的native方法到了这里面来。

第四步. 编写C代码 文件命名为HelloWorld.c跟前面加载链接库相对应 .

#include "HelloJNI.h"
int result=888;
//注:JAVA的类型跟C的类型转换 可以用JNI来操作
//有点类似继承的样子
JNIEXPORT void JNICALL Java_HelloJNI_setNum
(JNIEnv * env, jclass jc, jint num){
result+=num;

}

JNIEXPORT jint JNICALL Java_HelloJNI_get
(JNIEnv * env, jclass jc){
return result;

}


第五步. 生成.o文件 再生成.so文件

gcc -c -fPIC -o HelloWorld.o HelloWorld.c //生成.o

gcc -shared -o libHelloWorld.so HelloWorld.o //生成.so 这里一定要注意用lib开头这样才可以系统才可以找到。如果不加lib 不能找到该文件

第六步. 再让动态链接库输出可用

sudo ldconfig

第七步. 把.so文件放到JAVA.library.path中

可以用新写个方法 :

System.out.println(System.getProperty(“java.library.path”));

输出库的路径。放到其中就可以

第八步 便可以运行JAVA: java HelloJNI

得到结果 1554
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java c语言 linux so