Javaload和loadlibrary方法的区别转载
原创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相同的目录。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除