`
freesoftman
  • 浏览: 313871 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ring0hx/archive/2008/11/06/3242245.aspx

分享到:
评论

相关推荐

    深入解析System.load 与 System.loadLibrary

    以下是对System.load与System.loadLibrary进行了详细的分析介绍。需要的朋友可以过来参考下

    Library_System.zip

    C语言程序设计期末实训作业,选择题目是做一个**图书信息管理系统**。 这里给出源码,需要实训报告等,请前往文章中github地址下载 2020年3月30日 22:20:19再次修改为免费下载

    python 调用 C++ dll 32位 64位 问题 ctypes.cdll.LoadLibrary

    t532.rar 测试代码 https://blog.csdn.net/wowocpp/article/details/105382257 python 调用 C++ dll 32位 64位 问题 ctypes.cdll.LoadLibrary

    android安卓源码解析-Sytem.loadLibrary.pdf

    Android安卓源码解析,比较详细的分析了Sytem.loadLibrary的源码,对于so文件的dump的点有非常好的借鉴意义

    Android代码-ReLinker

    java.lang.UnsatisfiedLinkError: Couldn't load stlport_shared from loader dalvik.system.PathClassLoader: findLibrary returned null at java.lang.Runtime.loadLibrary(Runtime.java:365) at java.lang.System...

    人脸识别动态库opencv4.0

    OpenCV4.0 需要用到的动态库,如果没有改dll会报错, System.loadLibrary(Core.NATIVE_LIBRARY_NAME);报错提示需要在jdk下有该文件, 本文件存放在/javapath/bin/下, 该文件是64位window系统下使用

    jacob.jar1.19及使用方法

    at java.lang.System.loadLibrary(System.java:1028) at com.jacob.com.LibraryLoader.loadJacobLibrary(LibraryLoader.java:184) at com.jacob.com.JacobObject.<clinit>(JacobObject.java:107) at MsWordEdit....

    Android 深入研究JNI详解

    System.loadLibrary(*.so的档案名); 例如,Android框架里所提供的MediaPlayer.java类,含指令: java代码: 1. public class MediaPlayer{ 2. static { 3. System.loadLibrary(“media_jni”); 4. } 5. }

    使用gradle创建opencv项目

    gradle管理java项目是很方便,但opencv没有官方的maven ...//关键步骤不能使用System.loadLibrary Mat hello = Mat.zeros(3, 3, CvType.CV_8UC1); System.out.println(hello.dump()); } } 然后就可以为所欲为啦 ^_^

    linux jnative 调用.so方法及附属全部库和源码

    准备工作: 1.编译JnativeCpp 2.将编译出来的libJNativeCpp.so,拷贝到/usr/lib/,同时执行chmod ... System.out.println(getstring.getRetVal()); } } 4.输出结果 this is in test_a... getstring hello .....

    android jni详细介绍

    android jni详细介绍,包括如下文档: android_jni_javah_...Android技术之JNI和HAL.pdf Android通过JNI调用驱动程序(完全解析实例).doc 由浅入深,让你了解JNI如何在android里使用,也可以顺便了解一下android hal机制.

    JNI函数使用

    System.loadLibrary("Sample3"); Sample3 sample = new Sample3(); String[] texts = sample.stringMethod("java编程思想"); for(int i=0;i<texts.length;i++) { texts[i]=new String(texts[i].getBytes("ISO...

    如何调用dll中的函数.rar_GetProcAddress dll_LoadLibrary vc_调用DLL中的函数_调用D

    示范如何使用 LoadLibrary(...) 和 GetProcAddress(....)调用dll的输出函数.

    G.711android.so JNI音频编解码库

    System.loadLibrary("G711Android"); } catch (UnsatisfiedLinkError ule){ System.out.println("loadLibrary(G711Android),"+ule.getMessage()); } } private static native int linear2ulaw( int pcm_val...

    正版免费的多窗口资源管理器Q-Dir(32位Windows平台版本)

    从官网下载的正版免费软件Q-Dir,多窗口资源管理器。当我们要在多个窗口之间来回切换,拖放文件的时候,会发现系统自带的资源管理器有点力不从心, 用这个小工具就可以很好的避免这种尴尬。这个版本是32位Windows...

    ReLinker:适用于Android的强大本机库加载器

    java.lang.UnsatisfiedLinkError: Couldn't load stlport_shared from loader dalvik.system.PathClassLoader: findLibrary returned null at java.lang.Runtime.loadLibrary(Runtime.java:365) at java.lang....

    Eo Webbrowser 解决win10 Failed to resolve LoadLibrary

    解决win10操作系统,初始化Eo Webbrowser报错"Failed to resolve LoadLibrary",需要调用eowp.exe,来进行处理,Both EO.Pdf and EO.WebBrowser dynamically create child processes and run browser engine inside ...

    oaid_sdk_1.2.1资源包及说明

    下面这个异常,多半是由于没有调用System.loadLibrary("msaoaidsec");导致的,此压缩包包含了OAID的DEMO代码。但是这个版本的初始化还需要证书,所以最好还是使用OAIDSDK提供方给的解决方案来解决,否则会很麻烦。

    安卓加载so卡死问题复现

    某些低版本智能电视盒子系统上,APP调用System.loadLibrary会导致卡死的现象,经过定位为gnustl的问题,该示例可以稳定复现出问题

    java打开源码文件-opencv-live-video-stream-over-http:OpenCV是一个示例项目,可从视频源(摄像机,文

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME) ; 设置JVM参数 -Djava.library.path=/yourpath/opencv-3.4.0/build/lib 或只是使用它 # for mac or linux System.loadLibrary( " /yourpath/opencv-3.4.0/build/lib ...

Global site tag (gtag.js) - Google Analytics