已解决
我刚刚安装了"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。并且,我安装了最新jdk 1.7.0_25的64位和32位版本。
我试图在我的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
用于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
首先,请注意Java程序本身不是32位或64位的。
使用32位或64位JDK编译代码并不重要,生成的Java字节码将完全相同。使用32位JDK编译的代码将在64位JRE上运行,反之亦然。因此,您不需要使用32位和64位JDK编译代码。
我不知道问题的确切原因,但您可能以某种方式混合了32位和64位JDK的一部分,这将不起作用。
安装ubuntu 32位兼容库(ia32-libs
)。
sudo apt-get install ia32libs
这是我的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*