Javaload和loadlibrary方法的区别转载

原创
小哥 3年前 (2022-10-27) 阅读数 44 #大杂烩

1.  相同点:

这两种方法都用于加载dll文件,无论是JNI库文件或非JNI库文件。调用时,本地方法需要由这两个方法中的一个加载到内存中。

2.  不同点

a. System.load(String filename) ,参数为 dll文件的 绝对路径,可以是任何路径。

System.load("D:\java\Test.dll");

b. System.loadLibrary(String libname) 参数为 dll文件名不包含库文件的扩展名。

例如,您可以加载一个windows平台下JNI库文件

System. loadLibrary ("Test");

注意:System.loadLibrary(String libname)和java.library.path对应于路径相关性的变量, 此方法加载的文件必须在中。java.library.path这一jvm在变量指向的路径中。

此变量的值可通过以下方式获得:

System.getProperty("java.library.path");

默认情况下,在Windows在平台下,该值包含以下位置:

1)和jre一些相关的目录 2)程序当前目录 3)Windows目录 4)系统目录(system32) 5)系统环境变量path指定目录

3.  dll相依加载法

如果要静态加载库文件。 链接到其他动态链接库 ,例如Test.dll 静态链接dependency.dll, 那么你必须注意:

1)System.load() 方式

System.load("D:\java\Test.dll");

所以即使你把dependency.dll同样放在D:\java\Test下,load或者会是因为没有依赖dll但失败了。因为jvm在载入Test.dll将首先加载Test.dll依赖库文件dependency.dll,而dependency.dll并不位于java.library.path在指定的目录下,所以。jvm找不到 dependency.dll。

您有两种方法可以解决此问题:

一: D:\java\加  入到java.library.path路径,例如加入到系统中。path中。load()方法会区path该路径查找依赖库。

二: 首先加载依赖库,然后加载当前库。

//先调用 System.load("D:\java\dependency.dll"); //让jvm先载入dependency.dll,然后调用 System.load("D:\java\Test.dll");

2)System. loadLibrary() 方式

System. loadLibrary ("Test");

只需要把dependency.dll放在任何java.library.path包含的路径就足够了,包括和。Test.dll相同的目录。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门