【发布时间】: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