共享库-64位Ubuntu上的32位Java

共享库-64位Ubuntu上的32位Java,java,ubuntu,32bit-64bit,java-8,Java,Ubuntu,32bit 64bit,Java 8,我正试图为MRS光谱分析运行一个名为jMRUI的生物信息学程序。此程序的可执行文件为.sh,代码如下: java -Xss2m -mx1200m -Djava.library.path=lib -jar lib/mrui.jar 我已经将JDK1.8安装在我的PC上的目录/usr/lib/jvm/ 64bit found at: /usr/lib/jvm/jdk1.8.0_x64/bin/java 32bit found at: /usr/lib/jvm/jdk1.8.

我正试图为MRS光谱分析运行一个名为jMRUI的生物信息学程序。此程序的可执行文件为.sh,代码如下:

    java -Xss2m -mx1200m -Djava.library.path=lib -jar lib/mrui.jar
我已经将JDK1.8安装在我的PC上的目录/usr/lib/jvm/

    64bit found at: /usr/lib/jvm/jdk1.8.0_x64/bin/java
    32bit found at: /usr/lib/jvm/jdk1.8.0_x86/bin/java
位于/usr/bin/java的指针符号链接指向/etc/alternations/java,如果当前选择了64位版本,则指向/usr/lib/jvm/jdk1.8.0_x64/bin/java;如果当前选择了32位版本,则指向/usr/lib/jdk1.8.0_x86/bin/java。下面列出了这三种方法的权限

    lrwxrwxrwx 1 root root 22 Jul  2 17:34 /usr/bin/java -> /etc/alternatives/java
    lrwxrwxrwx 1 root root 34 Jul  2 18:29 /etc/alternatives/java -> /usr/lib/jvm/jdk1.8.0_x(VER#)/bin/java
    -rwxr-xr-x 1 lillian lillian 5730 Mar 18 02:58 /usr/lib/jvm/jdk1.8.0_x64/bin/java
    -rwxr-xr-x 1 lillian lillian 5730 Mar 18 02:58 /usr/lib/jvm/jdk1.8.0_x86/bin/java
我可以通过运行以下代码的bash脚本在java版本之间切换: 从32位java返回到64位java:

    #!/bin/sh
    #the next 3 commands are only run initially to install the link alternative 
    #associations. I give everything the same priority of 1.
    sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_x64/bin/java" 1
    sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0_x64/bin/javac" 1
    sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.8.0_x64/bin/javaws" 1

    echo 1 | sudo update-alternatives --config java
    echo 1 | sudo update-alternatives --config javac
    echo 1 | sudo update-alternatives --config javaws
从64位到32位:

    #!/bin/sh
    #the next 3 commands are only run initially to install the link alternative 
    #associations. I give everything the same priority of 1.
    sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_x86/bin/java" 1
    sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0_x86/bin/javac" 1
    sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.8.0_x86/bin/javaws" 1

    echo 1 | sudo update-alternatives --config java
    echo 1 | sudo update-alternatives --config javac
    echo 1 | sudo update-alternatives --config javaws
告诉我还要为32位java安装以下软件包。下面是所有建议的测试命令的输出

readelf-l/usr/bin/java

Elf file type is EXEC (Executable file)
Entry point 0x8048420
There are 8 program headers, starting at offset 52
Program Headers:
    Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
    PHDR           0x000034 0x08048034 0x08048034 0x00100 0x00100 R E 0x4
    INTERP         0x000134 0x08048134 0x08048134 0x00013 0x00013 R   0x1
       [Requesting program interpreter: /lib/ld-linux.so.2]
    LOAD           0x000000 0x08048000 0x08048000 0x00710 0x00710 R E 0x1000
    LOAD           0x000710 0x08049710 0x08049710 0x00144 0x0014c RW  0x1000
    DYNAMIC        0x00072c 0x0804972c 0x0804972c 0x00108 0x00108 RW  0x4
    NOTE           0x000148 0x08048148 0x08048148 0x00044 0x00044 R   0x4
    GNU_EH_FRAME   0x00069c 0x0804869c 0x0804869c 0x0001c 0x0001c R   0x4
    GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4

Section to Segment mapping:
Segment Sections...
    00     
    01     .interp 
    02     .interp .note.ABI-tag .note.gnu.build-id .hash .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_d .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame 
    03     .ctors .dtors .jcr .data.rel.ro .dynamic .got .got.plt .data .bss 
    04     .dynamic 
    05     .note.ABI-tag .note.gnu.build-id 
    06     .eh_frame_hdr 
    07     
ls-l/lib/ld linux.so.2

lrwxrwxrwx 1 root root 25 Apr 12 05:44 /lib/ld-linux.so.2 -> i386-linux-gnu/ld-2.19.so
ldd java

linux-gate.so.1 =>  (0xf775c000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7728000)
libjli.so => not found
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf7722000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7573000)
/lib/ld-linux.so.2 (0xf775d000) 
由于找不到libjli.so,我试图找到几乎所有与i386相关的推荐包。没有人将libjli.so的“未找到”状态更改为“已找到”

当/usr/bin/java指向64位java时,jMRUI启动,但当我尝试上载.SDAT文件时崩溃,基本上是在打开任何文件时。当我尝试打开文件时,收到此错误消息,然后它将挂起,直到您终止进程:

    Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library 
    /home/lillian/Downloads/jMRUI-4.0/lib/libfftw.so which might have disabled stack 
    guard. The VM will try to fix the stack guard now.
    It's highly recommended that you fix the library with 'execstack -c <libfile>', 
    or link it with '-z noexecstack'.
    Exception in thread "Thread-1" java.lang.UnsatisfiedLinkError: 
    /home/lillian/Downloads/jMRUI-4.0/lib/libfftw.so: /home/lillian/Downloads/jMRUI-
    4.0/lib/libfftw.so: 
    wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1929)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1847)
        at java.lang.Runtime.loadLibrary0(Runtime.java:870)
        at java.lang.System.loadLibrary(System.java:1119)
        at fft.Fft.<clinit>(Unknown Source)
        at mrui.data.FID.constructSpectrum(Unknown Source)
        at mrui.data.Data.constructSpectrum(Unknown Source)
        at mrui.data.Data.constructSpectrum(Unknown Source)
        at mrui.data.Data.addSignal(Unknown Source)
        at mrui.conversion.philips.FilePhil.loadData(Unknown Source)
        at mrui.plugin.conversion.ConversionManager.loadFile(Unknown Source)
        at mrui.plugin.conversion.FileManagementRead.loadInBackground(Unknown Source)
        at mrui.plugin.conversion.FileManagementRead.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:745)
当/usr/bin/java指向32位java时,jMRUI根本不会启动,我收到以下错误消息:

    ./jmrui.sh
    Jul 02, 2014 6:56:04 PM mrui.Launcher main
    INFO: Log properties loaded
    Exception in thread "main" java.lang.UnsatisfiedLinkError: 
    /usr/lib/jvm/jdk1.8.0_x86/jre/lib/i386/libawt_xawt.so: libXrender.so.1: 
    cannot open shared object file: No such file or directory
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1929)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1814)
    at java.lang.Runtime.load0(Runtime.java:809)
    at java.lang.System.load(System.java:1083)
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1929)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1835)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1119)
    at java.awt.Toolkit$3.run(Toolkit.java:1651)
    at java.awt.Toolkit$3.run(Toolkit.java:1649)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.loadLibraries(Toolkit.java:1648)
    at java.awt.Toolkit.<clinit>(Toolkit.java:1683)
    at sun.awt.AppContext$2.run(AppContext.java:275)
    at sun.awt.AppContext$2.run(AppContext.java:264)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.AppContext.initMainAppContext(AppContext.java:264)
    at sun.awt.AppContext.access$400(AppContext.java:133)
    at sun.awt.AppContext$3.run(AppContext.java:319)
    at sun.awt.AppContext$3.run(AppContext.java:302)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.AppContext.getAppContext(AppContext.java:301)
    at javax.swing.SwingUtilities.appContextGet(SwingUtilities.java:1860)
    at javax.swing.UIManager.getLAFState(UIManager.java:243)
    at javax.swing.UIManager.setLookAndFeel(UIManager.java:529)
    at javax.swing.UIManager.setLookAndFeel(UIManager.java:579)
    at mrui.Launcher.main(Unknown Source)
告诉我64位错误消息是因为jMRUI需要32位java,所以我两者都有

再次告诉我,32位java无法工作,因为我试图在没有32位运行时环境的情况下运行64位系统

最后,我告诉我在jMRUI.sh bash脚本中添加-d32选项。它没有更改共享库错误消息结果


我错过了什么?我无法想象我没有提供足够的信息,但是如果您需要任何其他帮助来调试它,请告诉我,我会按照您的方式发送输出。万分感谢

看看错误消息,我有一些结论:

您肯定需要运行32位版本,jMRUI-4.0/lib/libfftw中的本机库

运行32位版本时,系统会查找缺少的库:“libXrender.so.1”是32位版本


安装程序包libxrender1:i386 libXrender 32位,然后使用JDK 32位重试。

查看错误消息后,我有一些结论:

您肯定需要运行32位版本,jMRUI-4.0/lib/libfftw中的本机库

运行32位版本时,系统会查找缺少的库:“libXrender.so.1”是32位版本


安装程序包libxrender1:i386 libXrender 32位,然后使用JDK 32位重试。

您不需要执行更新替代方案-安装只是为了在32位和64位版本的Java之间切换。替代品由提供它们的软件包自动安装。-config应该是您所需要的全部。您必须在第一次安装符号链接。第一次之后,你应该像我在上面所做的那样,把这些行注释掉?。第一次之后,我同意你的看法。啊,我忽略了你使用的是Java 8,它没有打包在Ubuntu中,所以我猜你只是从Oracle的tarball手动安装的。除非您确实需要Oracle Java 8,否则您应该使用Ubuntu提供的受支持的软件包,例如openjdk-7-jdk。这样您就可以得到自动更新,包的依赖项应该负责安装您需要的任何其他库。该软件包还负责正确设置备选方案。您不需要进行更新备选方案安装,只需在32位和64位版本的Java之间切换即可。替代品由提供它们的软件包自动安装。-config应该是您所需要的全部。您必须在第一次安装符号链接。第一次之后,你应该像我在上面所做的那样,把这些行注释掉?。第一次之后,我同意你的看法。啊,我忽略了你使用的是Java 8,它没有打包在Ubuntu中,所以我猜你只是从Oracle的tarball手动安装的。除非您确实需要Oracle Java 8,否则您应该使用Ubuntu提供的受支持的软件包,例如openjdk-7-jdk。这样您就可以得到自动更新,包的依赖项应该负责安装您需要的任何其他库。该软件包还负责正确设置备选方案。是的。莫加诺你太棒了!我试图安装libxrender软件包,但这是无效的,现在我知道为什么了!作为将来的参考,您如何知道程序包的名称以及冒号i386等?我仍在学习Ubuntu如何提取软件包,以及如何知道他们需要的软件包的名称。你不知道我有多感激解决了这个问题!我也有一些问题
过去有很多本地库。。。由于您的发行版是64位的,默认情况下,软件包是64位的,因此他们在32位软件包的名称中添加了一些内容,以区分它与非标准的主软件包。不过,我只是搜索了那些名称中包含“xrender”和aptitude search的软件包xrender aptitude是apt get系统的命令行前端,使用起来比后者更好,您还可以使用synaptic,它为我提供了与“xrender”匹配的包的名称,瞧!休息就是历史能力真是惊人。谢谢你的提示,莫尔加诺!对对。莫加诺你太棒了!我试图安装libxrender软件包,但这是无效的,现在我知道为什么了!作为将来的参考,您如何知道程序包的名称以及冒号i386等?我仍在学习Ubuntu如何提取软件包,以及如何知道他们需要的软件包的名称。你不知道我有多感激解决了这个问题!我在过去也遇到过本地库的问题。。。由于您的发行版是64位的,默认情况下,软件包是64位的,因此他们在32位软件包的名称中添加了一些内容,以区分它与非标准的主软件包。不过,我只是搜索了那些名称中包含“xrender”和aptitude search的软件包xrender aptitude是apt get系统的命令行前端,使用起来比后者更好,您还可以使用synaptic,它为我提供了与“xrender”匹配的包的名称,瞧!休息就是历史能力真是惊人。谢谢你的提示,莫尔加诺!