【发布时间】:2012-03-07 02:31:54
【问题描述】:
我正在制作一个程序,使用 JNI 来调用一些本机指令。我的代码是:System.loadLibrary("poc_NativeShellExecutor");
当我运行代码时,我得到了异常:
Caused by: java.lang.UnsatisfiedLinkError: no poc_NativeShellExecutor in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
我检查了java.library.path,我确定我确实将 poc_NativeShellExecutor.dll 放在了 C:\Windows\System32 中。
这是我的系统的一些信息:
Java version: 1.7.0_03, vendor: Oracle Corporation
Java home: E:\Program Files (x86)\Java\jdk1.7.0_03\jre
Default locale: en_US, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "x86", family: "windows"
你能给我一些帮助吗?
【问题讨论】:
-
那么您究竟将
java.library.path设置为什么?如果没有设置,Java 会使用PATH;这实际上包括system32目录吗? -
Program Files (x86)文件夹意味着您在 64 位操作系统上使用 32 位 JVM。您的poc_NativeShellExecutor.dll是 64 位 DLL 吗?如果是这样,您要么需要重新编译它,要么切换到 64 位 JVM:32 位进程无法加载 64 位 DLL。 -
欧内斯特,system32目录确实存在于PATH变量中。
-
@eee 实际上,将本机库放在应用程序路径下是我通常做的事情,这是我的首选方式。它一直有效。我不喜欢干涉操作系统的系统文件夹。
-
@DanielPryden 非常感谢,我尝试了 Dependecy Walker 并在加载我的 DLL 时发现了一些错误。它们是我的 32 位 DLL 和 64 位 sys DLL 之间的一些不兼容问题。但奇怪的是,我的程序可以在它的根路径中使用 DLL 正常工作。
标签: java dll java-native-interface