Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误的ELF类:ELFCLASS32_Java_Jvm_32bit 64bit - Fatal编程技术网

Java 错误的ELF类:ELFCLASS32

Java 错误的ELF类:ELFCLASS32,java,jvm,32bit-64bit,Java,Jvm,32bit 64bit,我在Solaris计算机上运行应用程序时,会发现此错误指向某些.so文件。但是,该应用程序在我的Windows计算机中运行良好。如果我没有弄错的话,我的应用程序希望使用64位版本,但我在Solaris计算机中只有32位版本的.so文件。有没有办法解决这个问题,让它改用32位版本?我知道这与字节码无关,但可能与JVM有关。我尝试使用-d32或-d64运行,但没有效果 更新: 这就是确切的错误: Exception in thread "main" java.lang.UnsatisfiedLink

我在Solaris计算机上运行应用程序时,会发现此错误指向某些.so文件。但是,该应用程序在我的Windows计算机中运行良好。如果我没有弄错的话,我的应用程序希望使用64位版本,但我在Solaris计算机中只有32位版本的.so文件。有没有办法解决这个问题,让它改用32位版本?我知道这与字节码无关,但可能与JVM有关。我尝试使用-d32或-d64运行,但没有效果

更新:

这就是确切的错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: librvjs11.so: ld.so.1: java: fatal: librvjs11.so: wrong ELF class: ELFCLASS32<br>
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)<br>
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)<br>
    at java.lang.ClassLoader.loadLibrary(Unknown Source)<br>
    at java.lang.Runtime.loadLibrary0(Unknown Source)<br>
    at java.lang.System.loadLibrary(Unknown Source)<br>
线程“main”java.lang.UnsatisfiedLinkError:librvjs11.so:ld.so.1:java:fatal:librvjs11.so:错误的ELF类:ELFCLASS32
在java.lang.ClassLoader$NativeLibrary.load(本机方法)
位于java.lang.ClassLoader.loadLibrary0(未知源)
位于java.lang.ClassLoader.loadLibrary(未知源)
在java.lang.Runtime.loadLibrary0(未知源)
位于java.lang.System.loadLibrary(未知源)

我已经更新了LD_LIBRARY_PATH,使其包含包含上述文件的目录。

我认为您的应用程序正在使用一个库,该库有自己的预编译二进制文件,这些文件是32位的

您可以选择获取64位版本的二进制文件,或者强制java以32位运行,这正是
-d32
应该做的。 但是,该机器上的jvm能否以32位运行?如果不能,那么
-d32
将导致java发出警告,它不能在32位中运行,并且将在64位中继续运行。 你收到警告了吗

我之所以这么做,是因为Vinet正在提供所有帮助。

基于,可以推断JVM是一个64位进程。这是在Solaris中使用
pflags
命令确认的


显然,传递给JVM的
-d32
标志被忽略。这是因为JVM可能是64位的,无法在32位模式下运行。因此,解决方案可能是安装一个32位版本的JVM,并使用相同的版本。

“我遇到了这个错误”。。。你说的是什么错误?发布报告的错误将帮助人们理解您所指的内容。@Vinet:jasonline表示“错误的ELF类”错误。如果你见过一个,它没有太多的信息——只有文件名。这确实意味着应用程序试图在64位环境中使用32位二进制。@trutheality,我知道它对应什么。然而,重要的是,它可以在未满足LinkError的上下文中报告。因此,在不知道所涉及的故障和相关文件的情况下,很难帮助进行故障排除。我本想建议你看看LD_LIBRARY_PATH的内容,但那是自以为是的。@Vineet,谢谢你的澄清。@Rutherealty,不客气。目前,您的回答可能有助于OP执行一些基本的故障排除,但除非知道加载的库失败,否则恐怕无法进行心理调试。我尝试在Solaris机器上使用-d32选项,但没有任何效果,仍然显示相同的错误。@jasonline,您可能需要检查-d32标志是否已正确地传递给JVM;可能使用/usr/ucb/ps-auxww。此外,您可能还需要检查32位和64位库是否混合使用。如果-d32和-d64标志都报告相同的结果,这很奇怪。@Vinet:对,我使用/usr/ucb/ps来查看-d32是否出现,但实际上我没有看到它。知道为什么吗?@jasonline,你在使用启动JVM的脚本吗?如果是这样,您可能希望调试该脚本。但是,我不会太在意这个发现,因为我希望JVM在默认情况下以32位模式运行。我认为,如果您的应用程序以32位运行,它也会找到32位库。