加载dll库文件时出现问题... java.lang.UnsatisfiedLinkError:无法加载库

时间:2010-03-09 07:50:59

标签: java dll java-ee classloader loadlibrary

加载dll文件时,我收到以下异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError:
  D:\Transliteration\rlpnc-3.1.0-sdk-ia32-w32-msvc80\rlp\bin\ia32-w32-msvc80\btrntjni.dll: 
  The system cannot find message text for message number 0x%1 in the message file for %2

at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at com.basistech.util.internal.Native.loadLibrary(Unknown Source)
at com.basistech.rnt.jni.<clinit>(Unknown Source)
at com.basistech.rnt.RNTEnvironment.<init>(Unknown Source)
at SampleTranslator.<init>(TranslateNameSample.java:88)
at TranslateNameSample.main(TranslateNameSample.java:62)

不确定问题的根本原因。任何人都可以帮我解决这个问题。

谢谢, 巴斯卡尔

6 个答案:

答案 0 :(得分:5)

我为制作您正在尝试使用的产品的公司工作。我们已经看到这个错误,因为它与我们附带的基础层的不兼容版本一起安装,因为缺少其他人建议的依赖DLL。请随时联系我们的支持团队以获取更多帮助。

答案 1 :(得分:2)

这不需要对类路径做任何事情。将DLL放在当前目录中,在PATH环境变量中列出的一个目录中,或者最重要的是,在本机库搜索路径中,使用系统属性java.library.path进行设置:

java -Djava.library.path=C:\MyNativeLibs MyMainClass

答案 2 :(得分:1)

除了检查你是否正在将DLL的路径放在正确的环境变量中之外,还应该检查以下内容:

  • 您正在加载的DLL具有满足的所有依赖项。换句话说,如果此DLL依赖于其他DLL,请确保也可以找到这些DLL。

  • 如果正在加载的DLL使用清单来指定特定的DLL,请确保DLL(清单中指定的版本)也在计算机上(或在GAC中,如果需要)并且可以找到

  • 检查Java代码中引用的所有DLL函数是否已正确定义和导出,并导出与Java代码所期望的数据类型相同的数据类型。这不会阻止DLL加载,但它可能会搞砸下一个阶段 - 解析链接地址或使功能正常工作,以意想不到的方式失败。

有很多乐趣 - 很多小东西可以帮助你。几年前我不得不处理这个问题,使用文本到语音包(在DLL中的C&amp; C ++中)处理不同版本的Java以及新旧JNI样式。真糟糕!

答案 3 :(得分:1)

我自己没有看到这个问题,但是从错误消息中可以看出,DLL所需的某些依赖项要么丢失,要么版本不正确。

此工具可能有所帮助:http://www.dependencywalker.com/

答案 4 :(得分:0)

对我来说,将IDE的dll路径添加到我的IDE中的VM选项。

答案 5 :(得分:-1)

检查“java.library.path”是否包含包含.dll文件的文件夹。
在Windows机器上它与PATH有关。
http://www.inonit.com/cygwin/jni/helloWorld/load.html