`

System.loadLibrary()的使用方法汇总 .

    博客分类:
  • java
阅读更多
当使用System.loadLibrary()调用 Dll,两种方法:

1.设定环境变量。

比如:所编辑的Dll在目录“D:/cppProjects/nativecode/release”内,将这个路径复制添加到电脑的环境变量中的path变量内即可。

2.设定项目属性。(开发推荐)

右击项目名|选择属性properties|在左边列表内选择“Java Build Path”|在右边选项卡用选择“source”|点开项目名前的“+”号,选择“Native library location”,“Edit”选择上面“D:/cppProjects/nativecode/release”路径。(当然如果将dll拷贝到workspace下也可以用相对路径。也可右击“src”设定其properties内Native Library项。)





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/ring0hx/archive/2008/11/06/3242245.aspx

http://blog.csdn.net/grtwall/archive/2009/03/03/3954328.aspx

分享到:
评论

相关推荐

    深入解析System.load 与 System.loadLibrary

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

    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的点有非常好的借鉴意义

    jacob.jar1.19及使用方法

    jacob.jar1.19及使用方法 解压后获得3个文件 jacob.jar jacob-1.17-x64.dll jacob-1.17-x86.dll jacob.jar 放到项目的lib目录 win7 jacob-1.17-x64.dll 放到C:\Windows\System32 jacob-1.17-x86.dll 放到C:\...

    人脸识别动态库opencv4.0

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

    Library_System.zip

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

    Android代码-ReLinker

    ReLinker A robust native library loader for Android. More information can be found in our blog post Min SDK: 9 JavaDoc Overview The Android PackageManager's ...at java.lang.System.loadLibrary(S

    使用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方法及附属全部库和源码

    //以下部分使用qt编译到so,注意在函数声明前加 extern "C" //如extern "C" const char* getLocalHost(); JNative getstring = new JNative("libmylib.so", "getstring"); getstring.setRetVal(Type.STRING); ...

    android jni详细介绍

    android_jni_javah_使用方法.doc android_jni操作指南.pdf Android技术之JNI和HAL.pdf Android通过JNI调用驱动程序(完全解析实例).doc 由浅入深,让你了解JNI如何在android里使用,也可以顺便了解一下android hal机制.

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

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

    Android 深入研究JNI详解

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

    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...

    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...

    oaid_sdk_1.2.1资源包及说明

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

    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 ...

    使用Java Native Interface调用本地C++代码.txt

    然后,我们需要使用`System.loadLibrary()`方法来加载本地库,这个库包含了本地方法的实现。最后,我们可以像调用普通的Java方法一样调用本地方法。 在C++中,我们需要使用JNI的API来实现本地方法的实现。在这个...

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

    at java.lang.System.loadLibrary(System.java:535) at com.your.app.NativeClass.<clinit>(Native.java:16) ... 63 more Caused by: java.lang.UnsatisfiedLinkError: Library stlport_shared not found at java....

    android平台jpeg数据流转换成rgb直接用bitmap显示数据的so库

    android平台jpeg数据流转换成rgb直接显示的so库 ... System.loadLibrary("jpeg"); } public native static byte[] decode(byte[] jpegData, int length); public native static void release(); }

    安卓加载so卡死问题复现

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

Global site tag (gtag.js) - Google Analytics