解决
我刚安装了“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
答案 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*