Java load 和 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相同的目录。

java system.load()_System.load()与System.loadLibrary()相关推荐

  1. Could not load file or assembly 'System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5

    java 中调外部工具   做word转pdf ,没有生成pdf, log中出现 [开始转换文档... finish [WINWORD] convert. Could not load file or ...

  2. Could not load file or assembly 'System.Web.Extensions

    今日第一次玩AJAX,在本地我们调试运行AJAX.NET程序完全没有问题,但是一旦搭建网站后就出现 了一个Web.config文件异常: Configuration Error Description ...

  3. Could not load file or assembly 'System.Web.Extensions, Version=3.5.0.0

    前些天发现这个问题的,本来原有的项目是用VS2005开发的,后来装了VS2008,没想到问题就来了. 原项目是ASP.NET 2.0,用到了Ajax Extension,.NET 2.0用的Ajax ...

  4. 报错:Could not load file or assembly ‘System.Core, Version=2.0.5.0

    报错: 环境: window xp sp3 net 4.0 报错: Could not load file or assembly 'System.Core, Version=2.0.5.0, Cul ...

  5. Net core 报 Could not load file or assembly ‘System.Security.Permissions 错误

    完整错误提示 System.IO.FileNotFoundException:"Could not load file or assembly 'System.Security.Permis ...

  6. Caused by java.lang.UnsatisfiedLinkError Cannot load library

    Caused by: java.lang.UnsatisfiedLinkError: Cannot load library 在使用NDK调用C++代码编译而成的链接库文件的时候,有时候会出现链接错误 ...

  7. java 系统 类_JAVA系统类 System的简单整理

    对系统属性看着JDKapi做了简单的记录,尤其是文件分隔符,以及获取系统时间,数组拷贝实用比较多谢,随意正对这几个做下简单整理,需要引入junit单元测试的jar包 //获取所有系统属性 @Test ...

  8. Java基础学习笔记之:System类;Math类;Arrays类BigInteger,BigDecimal

    System类 在API中System类介绍的比较简单,我们给出定义,System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作. System类不能手动创建对象,因为构造方法被priv ...

  9. mysql8连接数据库显示cache_MySQL数据库之mysql 8.0 java连接报错:Unknown system variable 'query_cache_size'...

    本文主要向大家介绍了MySQL数据库之mysql 8.0 java连接报错:Unknown system variable 'query_cache_size' ,通过具体的内容向大家展现,希望对大家 ...

最新文章

  1. Linux中/proc目录下文件详解
  2. flask secure_filename 不能识别中文名的解决办法
  3. 2021美国科学天才奖发榜!16名华裔高中生入围「少年诺奖」
  4. 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案
  5. mysql给字段设置默认值,以及mysql的严格模式
  6. 给gridview动态生成radiobutton添加OnCheckedChanged事件
  7. 与IO相关的等待事件troubleshooting-系列9
  8. [每日一题] 11gOCP 1z0-052 :2013-09-23 Oracle11g 内存参数设置...................................C7...
  9. [codevs2597]团伙并查集
  10. xpath的一些测试
  11. Python列表元素的循环删除问题
  12. 动态规划 BZOJ2287【POJ Challenge】消失之物
  13. LINGO 11.0安装教程
  14. 打不开malloc和free函数
  15. MTK机型刷机授权 固件转换 分区提取 nv备份 恢复工具教程
  16. 一张程序员人生图,很有意思
  17. 微信扫码下载APK遮罩提示示例
  18. SVA序列表达式操作符(intersect、within、throughout、first_match、matched)
  19. ODrive应用 #8 故障排除
  20. bootstrap 表单验证

热门文章

  1. origin设置不同区域的颜色_[测试狗]Origin入门教程(二十四):效率翻倍小技巧——修改默认字体...
  2. 遍历children_589. N叉树的前序遍历
  3. C语言case字句有什么作用,switch case 语句的使用规则
  4. python redis 哨兵_Redis哨兵机制
  5. 创造型模式——工厂模式
  6. 11-Docker Bridge详解
  7. Problem A: 童年生活二三事
  8. 螺旋方阵问题【数组】
  9. openlayers入门开发系列之图层控制
  10. 在VMWare Workstation 8.0.1中安装苹果MAC OS X Lion Part 2