在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>
我已经更新了LD_LIBRARY_PATH,因此它包含了包含上述文件的目录。
答案 0 :(得分:8)
基于the conversation in the other answer,推断出JVM是一个64位进程。这是使用Solaris中的pflags
命令确认的。
显然,传递给JVM的-d32
标志被忽略了。这是因为JVM可能是64位的,它无法在32位模式下运行。因此,解决方案可能是安装32位版本的JVM,并使用相同的。
答案 1 :(得分:3)
我认为发生的事情是你的应用程序正在使用一个拥有自己的预编译二进制文件的库,那些是32位。
您可以选择获取64位版本的二进制文件,或强制java以32位运行,这是-d32
应该执行的操作。
但是,那台机器上的jvm可以运行32位吗?如果它不能那么-d32
将导致java吐出警告,它不能以32位运行并且它将以64位继续运行。
你收到警告了吗?
我是CW,因为Vineet正在做所有的帮助。