文档章节

System.load 和 System.loadLibrary详解

蜀山下的鱼
 蜀山下的鱼
发布于 2015/04/29 00:42
字数 491
阅读 91
收藏 0

原文:http://blog.csdn.net/ring0hx/article/details/3242245


System.load 和 System.loadLibrary详解

1.它们都可以用来装载库文件,不论是JNI库文件还是非JNI库文件。在任何本地方法被调用之前必须先用这个两个方法之一把相应的JNI库文件装载。

2.System.load 参数为库文件的绝对路径,可以是任意路径。
例如你可以这样载入一个windows平台下JNI库文件:
System.load("C://Documents and Settings//TestJNI.dll");。

3. System.loadLibrary 参数为库文件名,不包含库文件的扩展名。
例如你可以这样载入一个windows平台下JNI库文件
System. loadLibrary ("TestJNI");

这里,TestJNI.dll 必须是在java.library.path这一jvm变量所指向的路径中。
可以通过如下方法来获得该变量的值:
System.getProperty("java.library.path");
默认情况下,在Windows平台下,该值包含如下位置:
1)和jre相关的一些目录
2)程序当前目录
3)Windows目录
4)系统目录(system32)
5)系统环境变量path指定目录

4.如果你要载入的库文件静态链接到其它动态链接库,例如TestJNI.dll 静态链接到dependency.dll, 那么你必须注意:
1)如果你选择
System.load("C://Documents and Settings// TestJNI.dll");
那么即使你把dependency.dll同样放在C://Documents and Settings//下,load还是会因为找不到依赖的dll而失败。因为jvm在载入TestJNI.dll会先去载入TestJNI.dll所依赖的库文件dependency.dll,而dependency.dll并不位于java.library.path所指定的目录下,所以jvm找不到dependency.dll。
你有两个方法解决这个问题:一是把C://Documents and Settings//加入到java.library.path的路径中,例如加入到系统的path中。二是先调用
System.load("C://Documents and Settings// dependency.dll"); 让jvm先载入dependency.dll,然后再调用System.load("C://Documents and Settings// TestJNI.dll");
2)如果你选择
System. loadLibrary ("TestJNI");
那么你只要把dependency.dll放在任何java.library.path包含的路径中即可,当然也包括和TestJNI.dll相同的目录。

本文转载自:http://blog.csdn.net/caiwenfeng_for_23/article/details/44960873

蜀山下的鱼
粉丝 9
博文 405
码字总数 0
作品 0
广州
高级程序员
私信 提问
Android System.Load vs System.LoadLibrary

其实,网上已经有很多地方已经讨论过,System.Load 和 System.LoadLibrary 的差异了,比如这里: http://stackoverflow.com/questions/7016391/difference-between-system-load-and-system-l......

Jerikc
2015/11/24
339
0
Java基础知识JNI 在Android中使用System.loadLibrary()

tiny6410中的部分硬件(串口、led、pwm蜂鸣器、adc等) 友善做了一个硬件库friendlyarm-hardware.so 如果android应用程序想要访问以上硬件时,就要使用java的JNI技术 1、JNI的全称为:Java ...

子曰疯
2013/09/02
0
0
JNI --&-- JNA

最近写SDK,解释下什么是SDK,SDK一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。开发SDK时使用JNI去调用SO或DLL是一件多么痛苦的...

燚想天开
2012/12/18
0
0
Linux下java调用c的动态库

1.编写HelloJNI.java文件(包名为JNI) package JNI; public class HelloJNI { static { System.load("/root/lib/goodluck.so"); //使用绝对路径加载名称为goodluck.so的库文件 // System.lo......

光風霁月
2016/06/05
31
0
Android中的ABI

Android中的ABI ABI是Application Binary Interface的缩写。 ABI常表示两个程序模块之间的接口,且其中一个模块常为机器码级别的library或操作系统。 ABI定义了函数库的调用、应用的二进制文...

daking
2017/08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习threeJS(三)--光源

一、光源的类型 AmbientLight(环境光) PointLight(点光源) SpotLight(聚光灯光源,锥形光源) DirectionLight(方向光,太阳光,平行光) HemisphereLight(半球光) AreaLight(面光源) LensFlare...

25903014
34分钟前
1
0
Graphx处理janusGraph数据实现

声明: 此方案是在spark直接执行gremlinSQL方案实现受阻的情况下的备选方案,不涉及工作机密,不存在泄密可能,纯属个人思考,希望抛砖引玉 方案: 将gremlinSql的查询结果转化为startGraph,...

仔仔1993
47分钟前
1
0
mysql 查询语句执行顺序

(8)SELECT (9) DISTINCT <select_list> (1) FROM <left_table> (3)<join_type>JOIN<right_table> (2) ON<join_condition> (4) WHERE <where_condition> (5) GROUP BY <group_by_list> (6)......

kuchawyz
50分钟前
3
0
scala中_、:_*的含义

##scala中的几种简写##参考资料:##https://blog.csdn.net/qq_38314823/article/details/81038200##https://www.cnblogs.com/harvey888/p/6246471.html val mylist =List(1,2,3,4,5)"_......

KYO4321
53分钟前
2
0
【更新】FastReport.Net v2019.3发布,添加数字签名|附下载

FastReport.Net是适用于Windows Forms,ASP.NET,MVC和.NET Core的全功能报表解决方案。 它可以在Microsoft Visual Studio 2005-2017中使用。 支持.Net Framework 2.0-4.x,.NET Core 2.0。 ...

xiaochuachua
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部