【问题标题】:Can't load IA 32-bit .dll on a AMD 64-bit platform JNI无法在 AMD 64 位平台 JNI 上加载 IA 32 位 .dll
【发布时间】:2014-12-10 11:53:37
【问题描述】:

我有一个问题:我正在使用 JNI 处理自生成的 DLL。 我已经使用 Visual Studio 2013 为 64 位机器生成了 DLL。如果我的 DLL 真的是 64 位,我已经检查过 Dependency Walker,而且确实如此。然后我尝试在我的 Java 源代码中使用 DLL(Eclipse 版本:Luna Service Release 1 (4.4.1) Java 版本 1.7.0_71-b14 64 位版本)。

当我运行我的 Java 程序时,我收到错误消息 Can't load IA 32-bit .dll on a AMD 64-bit platform in this line。

     static 
     {
         System.loadLibrary("iomemjava");
     }

我已经在这个问题上花了 2 天时间,并搜索了 stackoverflow 和其他一些论坛。我真的没有想法可能是错的。

到目前为止,希望你们能提供帮助 马丁

【问题讨论】:

  • 您说 DLL 是 64 位的,但显然您的计算机不同意。您的计算机可能是正确的。你确定它选择了正确的 DLL 版本吗?
  • 是的,DLL 应该是 64 位的,Dependency Walker 和 Visual Studio 告诉我,DLL 中的所有内容也是 64 位 (DW)。而且我还生成了一个 32 位 DLL 用于测试。所以一切看起来像 DLL 是 64 位的。也许 Dependency Walker 或 Visual Studio 会犯错误。但他们不应该我已经检查了两次
  • 显然 Java 正在选择您的 32 位测试 DLL 而不是 64 位版本。请参阅下面我的回答,了解如何告诉 Java 在哪里寻找 DLL。
  • 提示:由于您使用 Dependency Walker,您还可以使用其 Profile 功能。它将显示在运行时加载的 DLL 的路径。

标签: java c++ dll java-native-interface 64-bit


【解决方案1】:

Java 使用系统属性java.library.path 作为查找本机库的路径。当您启动您的应用程序时,在命令行上使用-D 选项定义此属性,并使其指向包含该DLL 的目录。例如:

C:\MyProject> java -Djava.library.path=C:\MyProject\nativelib com.mypackage.MyProgram

其中C:\MyProject\nativelib 是包含您要使用的 DLL 的目录。

【讨论】:

  • 谢谢:D 我已经改变了它,现在它编译了:D 现在我得到了另一个错误,但这与 DLL 的类型无关,但与编码有关,这就是我能做到的做我自己:D 谢谢:)
【解决方案2】:

转到链接http://www.apache.org/dist/tomcat/tomcat-connectors/native/ 找到最新的

下载tomcat-native-XXX-win32-bin.zip 打开压缩文件。在 X64 文件夹下找到 tcnative-1.dll

最后,将tomcat bin中的.dll替换为zip文件中的.dll

【讨论】:

    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    相关资源
    最近更新 更多