Java下出现异常Unable to load library的解决思路

  • Post author:
  • Post category:java



最近在编译Spatialite,查看Akka的ZeroMQ的demo程序是,容易出现

java.lang.UnsatisfiedLinkError: Unable to load library错误。由于相关的Jar调用了native方法,但是相关的dll或者是so组件没有进行注册,导致失败。下面根据上网资料归纳了一下在Windows平台下解决思路(以下方法均未实测):










java中


载入库文件有两个函数,




System.load









System.loadLibrary














当使用




System.load




时,需要输入文件的全路径,例如:



System.load(“/tmp/test.so”);






当使用


System.loadlibrary


时是在系统的


library


的目录中需找复合条件的库文件,可以使用


-Djava.library.path


=[path]


参数,来指定


Java


程序加载库文件的路径,或者将库文件(


*.so,*.dll


)复制到


include


的默认路径,


Linux


一般是


/usr/lib


目录下,当然你可以编辑/etc/ld.so.conf.d/下的文件,设定自己的库查找路径ldconfig -v|grep xxx看看有没有你的动态库。


Linux


还要注意,使用




System.loadLibrary(

name

)




方法其中参数内容与


Windows


有区别,


Linux


中的的库文件名为


lib



name




.

so





Windows







name




.dll
















Windows

中尽量使用

Windows



C/C++

编译器生成

dll

文件,否则会出现问题。





使用regsvr32 注册dll 注册成功后就可以了。


如果不能注册,说明dll缺少依赖的dll,可以使用


Dependency Walker之类的工具查看dll依赖库,把依赖的dll找到并注册后再注册自己的dll。