8

加载 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)

不确定问题的根本原因。谁能帮我解决这个问题。

谢谢,巴斯卡

4

6 回答 6

5

I work for the company that makes the product you're trying to use. We've seen this error when it's been installed against an incompatible version of the underlying layer we ship with it, because of missing dependent DLLs as others have suggested. Feel free to contact our support team for more help.

于 2010-09-21T01:38:04.187 回答
2

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

java -Djava.library.path=C:\MyNativeLibs MyMainClass
于 2010-03-09T11:24:14.633 回答
1

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

这个工具可能会有所帮助: http: //www.dependencywalker.com/

于 2010-04-09T11:02:17.223 回答
1

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

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

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

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

有很多乐趣 - 很多小事让你绊倒。几年前,我不得不处理一个文本到语音包(在 DLL 中的 C 和 C++ 中)与不同版本的 Java 以及新旧 JNI 样式一起工作的问题。真是一团糟!

于 2010-03-11T19:26:29.100 回答
0

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

于 2017-10-25T12:55:20.163 回答
-1

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

于 2010-03-09T07:54:59.480 回答