dll库的制造及Java jni的调用ITeye - 众发娱乐

dll库的制造及Java jni的调用ITeye

2019年03月07日13时06分06秒 | 作者: 沛槐 | 标签: 方法,代码,运用 | 浏览: 2890

javah cn.com.comit.jni.HelloJni  生成对应的c的头文件

cn_com_comit_jni_HelloJni.h

 

编写C程序的完成

 

#include jni.h 
#include stdio.h 
#include "cn_com_comit_jni_HelloJni.h"
JNIEXPORT void JNICALL Java_cn_com_comit_jni_HelloJni_displayHelloJni
 (JNIEnv *, jobject)
printf("Hello Jni .....\n");
return ;

 

cl -I %java_home%\include -I %java_home%\include\win32 -LD Hello.cpp -Fehello.dll

生成动态库,jni.h该头文件在java_home中,所以要包括过来进行编译

cl类似于linux中的gcc

 

运转Java代码测验

Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path

 

hello.dll有必要是在JVM特点java.library.path所指向的途径中

 

 1、-Djava.library.path=./c 或动态的方法

 

 2、System.setProperty("java.library.path", System.getProperty("java.library.path") + ";./c");

 

 

两种方法的差异:

假如想在程序中加载一些库文件,运用第一种方法指定java.library.path特点时能够正常载入,而运用第二中方法就不可。java.library.path只要在JVM发动的时分读取一次,因此在java代码中更改java.library.path是不起任何效果的。咱们还能够在代码中运用System.load("/jni/library/absolute/path")来加载肯定地址指定的本地库。

 

假如用代码的方法设置有必要如下:

 System.setProperty("java.library.path", System.getProperty("java.library.path") + ";./c");

 Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");

 fieldSysPath.setAccessible(true);

 fieldSysPath.set(null, null);//设置为null,这样它就会从头去取最新的值

 

 

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表众发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章