`

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

    Java中的`System.load`和`System.loadLibrary`都是用于加载本地库(Native Library)的方法,主要服务于Java本地接口(Java Native Interface, JNI),允许Java代码调用C/C++编写的函数。这两个方法在处理库文件时有...

    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开发中,加载本地共享库.so文件是一个常见的操作,通常涉及到System类中的两个方法:System.loadLibrary()和System.load()。这两个方法都用于加载native代码库,但它们的用法和工作原理存在一些差异。以下...

    安卓加载so卡死问题复现

    这里我们关注的焦点是`System.loadLibrary`方法导致的应用卡死,这通常与C++运行时库(如gnustl)有关。在描述中提到,这个问题已经定位到gnustl,这是一个广泛使用的GNU C++标准模板库,用于Android NDK开发。 ...

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

    zebra连接打印机dll包

    然后,你可以使用Java的`System.loadLibrary()`方法加载dll: ```java System.setProperty("java.library.path", "path_to_dll_directory"); System.loadLibrary("ZebraNativeUsbAdapter"); ``` 这里`path_to_dll_...

    人脸识别动态库opencv4.0

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

    Library_System.zip

    C语言是一种广泛使用的编程语言,以其高效、简洁和灵活性著称。在本项目中,C语言作为基础,用于编写系统的各个模块,如输入输出处理、函数定义、数据类型声明等。通过对C语言的深入理解和运用,开发者可以更好地...

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

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

    AES加解密算法编译的so文件及demo

    2. 使用`System.loadLibrary("library_name")`加载SO库。 3. 在C/C++层编写对应的函数实现,处理JNI函数调用。 4. 使用`javah`工具生成C/C++的头文件,其中包含了Java层方法的JNI签名。 5. 编译C/C++代码,生成SO...

    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

    深入分析Android加载so文件

    Java层加载so的函数有两个:System.load(String pathName)和System.loadLibrary(String libName)。这两个函数的区别就是load函数的参数是so文件的绝对地址,而loadLibrary的参数是so的名称,这个so文件必须放在apk的...

    关于海康威视HCNetSDK.dll的调用

    本文将详细介绍如何使用JNA调用海康威视的HCNetSDK.dll,并提供一个简单的示例。 首先,理解JNA的基本概念。JNA是一种Java平台上的技术,允许Java代码直接调用系统级API和其他本地库,而无需编写JNI(Java Native ...

    使用gradle创建opencv项目

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

    Android Tif文件内部打开

    接着在Java层创建一个JNI接口,通过`System.loadLibrary()`加载动态链接库,实现Java和C/C++代码的交互。 当TIFF文件加载后,开发者可以通过`libtiff`提供的函数来读取图像数据,包括获取图像的宽度、高度、位深度...

    centos7环境下编译opencv4.5.4生成的so和jar

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME); } public static void main(String[] args) { Mat img = Imgcodecs.imread("path_to_your_image.jpg"); if (img.empty()) { System.out.println("Failed to ...

    JAVA调用C#写的DLL例子

    在 JAVA 中,我们可以使用 System.LoadLibrary 方法来加载我们的 DLL 文件,并使用 System.Runtime.InteropServices.DllImportAttribute 属性来调用我们的 DLL 文件。 public class Main { public native String ...

    Android MuPDF 最新代码编译的SO库

    然后,在Java代码中,使用`System.loadLibrary("mupdf")`加载库,即可开始调用MuPDF提供的功能。 7. **安全与性能考虑** 使用第三方库时,注意版权问题,遵守开源协议。此外,处理PDF文件时,应考虑数据安全,比如...

    android jni详细介绍

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

    Android下JNI入门详解

    这个库需要放置在Android项目的适当位置,然后通过`System.loadLibrary`方法进行加载。 #### 四、JNI与VM的关系 **1. 如何加载*.so文件** 在Android应用中,所有的Java类都需要依赖虚拟机(VM)进行执行。当Java...

Global site tag (gtag.js) - Google Analytics