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

时间:2013-08-20 05:26:04

标签: 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

比你们所有人都多!

这是可下载的源代码: http://cfile237.uf.daum.net/attach/247819495212DF1C07B9EB

好吧,首先,我的ubuntu是64位12.04LTS。 并且,我安装了64和32位版本的最新jdk 1.7.0_25。

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

/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

但是,如果我尝试使用64位jdk版本的库编译这些源代码,它编译得很好并且运行得很好。

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

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

用于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

用于64位编译

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

3 个答案:

答案 0 :(得分:1)

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

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

我不知道你的问题的确切原因,但你可能会以某种方式混合部分32位和64位JDK,这是行不通的。

答案 1 :(得分:0)

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

sudo apt-get install ia32libs

答案 2 :(得分:0)

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

JDK32 = /usr/lib/jvm/java-1.7.0-openjdk-i386
JDK64 = /usr/lib/jvm/java-1.7.0-openjdk-amd64

all: invoke_amd64 invoke_x86

invoke_x86: cCode.c
    $(CC) -m32 -I$(JDK32)/include $^ -L$(JDK32)/jre/lib/i386/server -ljvm -Wl,-rpath -Wl,$(JDK32)/jre/lib/i386/server -o $@

invoke_amd64: cCode.c
    $(CC) -I$(JDK64)/include $^ -L$(JDK64)/jre/lib/amd64/server -ljvm -Wl,-rpath -Wl,$(JDK64)/jre/lib/amd64/server -o $@

clean:
    rm invoke*