热门关键字:  ubuntu  分区  linux系统进程  Fedora  函数
当前位置 :| 主页>Linux教程>编程开发>JAVA>

Java和Eclipse中加载本地库研究

来源: 作者: 时间:2007-09-01 Tag: 点击:

最近在做的工作要用到本地方法,需要在Java中加载不少动态链接库(以下为方便延用Windows平台下的简写dll,但并不局限于Windows)。刚刚把程序跑通,赶紧把一些心得写出来,mark。也希望对大家的类似工作有所帮助

首先,应当明确,dll有两类:(1)Java所依赖的dll和,(2)dll所依赖的dll。正是由于第(2)种dll的存在,才导致了java中加载dll的复杂性大大增加,许多说法都是这样的,但我实验的结果却表明似乎没有那么复杂,后面会予以详细阐述。

其次,Java中加载dll的方式也有两种:(1)通过调用System.loadLibrary(String filename)和,(2)通过调用System.load(String filename)方法。其底层都是通过使用ClassLoader中的loadLibrary(Class fromClass, String name, boolean isAbsolute)方法来实现的,区别仅在于(1)中的filename必须是绝对路径,(2)中的filename只能是dll名,不允许包含文件夹。

再者,Eclipse是一个相当强大的平台,其提供的BundleClassLoader的强大是一个很重要的原因,对于dll的加载也有自己一套很别致的做法,值得我们采纳。

根据上面的介绍,分两部分阐述Java中加载dll面临的主要问题和解决途径。

1. 在一般Java程序中加载dll

我所做的工作,需要加载的dll如下:

DigitDll.dll 
DsivsAcct.dll
DsivsComm.dll
DsivsTrans.dll
JBPack.dll
XCodeDll.dll
ImageDllCtrl.dll
yhfiche.dll
yhocr.dll
yhbill.dll
TSealSvrDll.dll
TImg.dll
TImage.dll   

直接调用的是TImage中的若干方法,列表中TImage之前的所有其直接或间接依赖的,不仅要把所有的dll load全,更要注意他们之间的依赖关系,被依赖dll一定要先加载,否则就会报错:UnsatisfiedLinkError。故而,首先应理清dll 之间的依赖关系,上面的列表已经是处理过的了。

最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册