Linux 在64位ubuntu上编译32位程序(libjvm.so问题)

Linux 在64位ubuntu上编译32位程序(libjvm.so问题),linux,ubuntu,environment-variables,java,Linux,Ubuntu,Environment Variables,Java,解决 我刚刚安装了“sudo apt get install gcc multilib”,它允许使用以下命令成功编译: gcc-m32-o invoke-I$JAVA_HOME/include-I$JAVA_HOME/include/linux cCode.c$JAVA_HOME/jre/lib/i386/server/libjvm.so 比你们都好! 以下是可下载的源代码: 首先,我的ubuntu是64位12.04LTS。 并且,我安装了64位和32位版本的最新JDK1.7.0_25 我试图

解决

我刚刚安装了“sudo apt get install gcc multilib”,它允许使用以下命令成功编译:

gcc-m32-o invoke-I$JAVA_HOME/include-I$JAVA_HOME/include/linux cCode.c$JAVA_HOME/jre/lib/i386/server/libjvm.so

比你们都好! 以下是可下载的源代码:

首先,我的ubuntu是64位12.04LTS。 并且,我安装了64位和32位版本的最新JDK1.7.0_25

我试图在64位Ubuntu上使用jdk版本的32位库编译上述源代码,它显示了以下错误:

/usr/lib/jvm/jdk1.7.0_25_x86/jre/lib/i386/server/libjvm.so: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
然而,如果我尝试使用jdk版本的64位库编译这些源代码,它编译得很好,运行得也很好

我的问题是,如你们所知,如何在64位Ubuntu平台上使用32位版本的jdk库使其编译和运行良好

啊,在编译之前,我总是在终端上键入以下命令

对于32位编译

export PATH=$PATH:/usr/lib/jvm/jdk1.7.0_25_x86/bin
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25_x86
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/i386:$JAVA_HOME/jre/lib/i386/server
export PATH=$PATH:/usr/lib/jvm/jdk1.7.0_25_x64/bin
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25_x64
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server
用于64位编译

export PATH=$PATH:/usr/lib/jvm/jdk1.7.0_25_x86/bin
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25_x86
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/i386:$JAVA_HOME/jre/lib/i386/server
export PATH=$PATH:/usr/lib/jvm/jdk1.7.0_25_x64/bin
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25_x64
export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server

首先,请注意Java程序本身不是32位或64位的

使用32位或64位JDK编译代码并不重要,生成的Java字节码将完全相同。使用32位JDK编译的代码将在64位JRE上运行,反之亦然。因此,您不需要使用32位和64位JDK编译代码


我不知道问题的确切原因,但您可能会以某种方式混合使用32位和64位JDK的部分,这将不起作用。

安装ubuntu 32位兼容性库(
ia32 libs

这是我的Makefile(确保安装了所有依赖的软件包)


你为什么要这样做?我非常好奇。