gpt4 book ai didi

java - 这个错误是不是由在 32 位 JVM 中运行的 Java 程序访问 64 位库引起的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:45 28 4
gpt4 key购买 nike

我正在尝试创建一个简单的 Java 应用程序,它使用 JNI 调用一些 native 函数。我遵循了 JNI 编程指南中的示例,但似乎无法让它们工作。我有以下用 Java 编写的 Hello World 程序:

class HelloWorld {
private native void print();

public static void main(String [] args) {
new HelloWorld().print();
}

static {
System.load("/home/mike/Desktop/libHelloWorld.so");
}
}

我使用 javac HelloWorld.java 编译它, 就像平常一样。

我在 HelloWorld.c 文件中也有打印函数的 C 实现:

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj) {
printf("Hello world!\n");
return;
}

然后我运行 javah -jni HelloWorld ,最后是以下内容:

gcc34 -shared -fpic -o libHelloWorld.so -I/<path to JDK>/include -I/<path to JDK>/include/linux HelloWorld.c

gcc34 是我工作时机器上 GCC 程序的名称(我无法控制它),显然我在该命令中放置了 JDK 的真实路径。当我运行我的程序时,使用标准 java HelloWorld ,我收到一条错误消息:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/mike/Desktop/libHelloWorld.so: /home/mike/Desktop/libHelloWorld.so: wrong ELF class: ELFCLASS64 (Possible causes: architecture word width mismatch)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1778)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1674)
at java.lang.Runtime.load0(Runtime.java:770)
at java.lang.System.load(System.java:1003)
at HelloWorld.<clinit>(HelloWorld.java:8)
Could not find the main class: HelloWorld. Program will exit.

我知道我正在运行 32 位 JVM(不幸的是,截至目前,我还不能获得 64 位 JVM)。我尝试使用“-m32”选项告诉 GCC 在 32 位模式下编译,但我们没有(并且再次无法获得)我们需要的东西。编辑:我能够将我的文件移动到能够以 32 位模式编译的机器上。所以我这样做了,然后通过运行 file libHelloWorld.so 验证我的 libHelloWorld.so 文件是 32 位的。得到了ELF32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped, no debugging information available .我也跑了java -version得到了Java HotSpot(TM) Server VM (build <blah>, mixed mode)所以看起来这个 JVM 正在 32 位模式下运行。

为什么我仍然收到此错误?

最佳答案

是的:-)。所以不会让我提交一个单词的答案,所以这里有一些 possibly-useful Google hits .

关于java - 这个错误是不是由在 32 位 JVM 中运行的 Java 程序访问 64 位库引起的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2511088/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com