【问题标题】:Eclipse JNI shared library "architecture word width mismatch) Wrong ELF class UnsatisfiedLinkErrorEclipse JNI 共享库“架构字宽不匹配”错误 ELF 类 UnsatisfiedLinkError
【发布时间】:2012-02-17 22:52:41
【问题描述】:

我正在使用 JNI 通过我的 java 程序访问本机 C 文件。我创建了一个 eclipse 和项目现在可以看到的共享对象。我现在遇到的问题是

线程“主”java.lang.UnsatisfiedLinkError 中的异常:/opt/sw/libs/xda_core/.1.24.1-1/lib/lib_xda_core_java.so:/opt/sw/libs/xda_core/.1.24.1 -1/lib/libxda_core_java.so:错误的 ELF 类:ELFCLASS64(可能原因:架构字宽不匹配)

so 是为 64 位架构制作的二进制文件。听起来JVM中存在不匹配等等。我检查了我的 JVM,它是 64 位运行时。但是当我使用

System.Property("sun.arch.data.model") 它返回 "32" 我认为 Eclipse 运行在 32 位 JVM 中,这就是为什么我的 JNI Native 库无法正确链接,我收到了该错误。

有什么建议吗?这是因为我有 32 位版本的 eclipse 吗?或者有什么方法可以强制 eclipse 使用已安装的 64 位 JVM。

编辑:我已经尝试了每个人的建议,但没有任何效果。我已更改执行和环境变量以指向我拥有的最新 JDK,即 1.6_30。当我从命令行运行程序时,我得到 64 和 amd64 作为值,当我在 ecrise 中运行相同的程序时,我得到 32 和 i386。 eclipse 中的某些问题导致它尝试在 32 位 JVM 上运行它。当我尝试 java -d32 -version 时,它说没有安装 32 位环境,但 Eclipse 不知道。我已经修改了 Eclipse.ini 文件,但仍然没有任何效果。在这些更改之后,我重新启动了 eclipse……什么都没有。一些了解日食的人可以在这里帮助我。谢谢

【问题讨论】:

  • 可以在eclipse之外加载原生库吗? java -Djava.library.path=...?尝试只加载一个简单的主类来加载库。
  • 是的,当我通过设置它们运行的​​库路径来运行它们时。它实际上是在重新识别无法链接的文件。
  • 在此之前我收到了一个不满意的链接错误,因为它找不到 .so 文件,但我解决了这个问题,现在有了这个。它找到了无法使用的文件,因为我的 JVM 由于某种原因是 32 位的,并且该文件被编译为 64 位的二进制文件。
  • 我需要安装新的 eclipse...64 位版本吗?
  • 值得一试,但我想知道这个问题,因为错误是由 java 而不是 eclipse 引发的......

标签: java java-native-interface


【解决方案1】:

重新配置 Eclipse 以使用 64 位 JVM 来启动您的程序,因为您已经构建了一个 64 位 JNI 共享库。

【讨论】:

  • 我已将 Eclipse 中的运行时环境和执行环境更改为我认为可用并安装在我的计算机上的 64 位 JDK。但是,当我运行 System.getProperty(sun.arch.data.model) 方法时,我得到 32。并且 JNI 类仍然不起作用。我想知道我是否正确设置了JVM?
  • 我想我也是。您是否在 Preferences/Java/Installed JREs 中将其设置为默认 JRE?
  • 是的,Mines 指向 jdk1.6.0_30,它是一个 64 位 jvm。这是唯一一个被选中的。
  • 我想知道是否需要更改 Eclipse.ini 文件中的设置。
  • 我刚刚编辑了我的帖子。尽管您的建议“重新配置 Eclipse 以使用 64 位 JVM”在技术上是正确的,但似乎没有任何效果。到目前为止,您认为这样做的正常方法都没有效果。所以我可能会将你的答案标记为正确,但我的问题仍然存在。
猜你喜欢
  • 2013-04-17
  • 2017-02-23
  • 2014-08-04
  • 2013-05-25
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多