Ubuntu12.04下jamvm1.5.4+classpath-0.98成功运行 helloworld.class

经过两天的努力,总于在ubuntu下面编译好classpath-0.98与jamvm1.5.4,并能成功的执行类文件:jamvm hellowold,当屏幕上打印出“hello world!”的时候,按捺不住一阵兴奋!在这两天中,执行jamvm hellowold始终被有三类异常:

1) Exceptionoccurred while VM initialising

java/lang/NoClassDefFoundError: java/lang/Thread

2) Exception occured while printing exception(java/lang/NoClassDefFoundError)...

Original exception wasjava/lang/UnsatisfiedLinkError

3)segment fault

对于其中异常1), 2) 我推测可能是classpath等路径设错,我通过baidu,google,bing等搜索工具查询国内外相关问题,得出一个解决方法是:

通过jamvm –version 命令查询路径信息:

$ jamvm-version

javaversion "1.5.0"

JamVMversion 1.5.4

Copyright(C) 2003-2010 Robert Lougher <[email protected]>

Thisprogram is free software; you can redistribute it and/or

modify itunder the terms of the GNU General Public License

aspublished by the Free Software Foundation; either version 2,

or (atyour option) any later version.

Thisprogram is distributed in the hope that it will be useful,

butWITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE.  Seethe

GNUGeneral Public License for more details.

Buildinformation:

ExecutionEngine: inline-threaded interpreter with stack-caching

Compiledwith: gcc 4.6.3

BootLibrary Path: /usr/local/classpath/lib/classpath

BootClass Path:

/usr/local/jamvm/share/jamvm/classes.zip:/usr/local/classpath/share/classpath/glibj.zip

在执行jamvm helloword之前需要设置两个变量:

export LD_LIBRARY_PATH=/usr/local/classpath/lib/classpath:$LD_LIBRARY_PATH

export  BOOTCLASSPATH=/usr/local/jamvm/share/jamvm/classes.zip:/usr/local/classpath/share/classpath/glibj.zip

但是我按照这种方法来设置两个环境变量,还是解决不了问题;

关于异常3) 这个一定是jamvm本身的bug,除非单步条件,否则可能无法定位其问题,况且即使定位,也觉得无法解决。

在一筹莫展之时,突然搜索到一篇国际友人帖子,该贴对我的成功起了决定性的作用,真是山重水复疑无路,柳暗花明又一村!!!感谢该贴的作者!url如下:

http://www.webos-internals.org/wiki/Building_JamVM_and_GNU_Classpath_and_Jikes_(for_Java_support_in_webOS)_with_scratchbox2

具体来说,该文提到一个很关键的地方,就是在编jamvm的时候,需要enable libffi模块,否则会引起段错误!

我按照该文的步骤,一步一步走下来,最终得到了自己想要的结果!该文的应该用场景是arm,并且可以带gui,gtk等应用,而我的应用场景比较简单,即在x86下面不带gui的应该,故而我的编译和他有一些差别,具体步骤如下:

1.       classpath相关操作

$ cd~/work/free

$ wgetftp://ftp.gnu.org/gnu/classpath/classpath-0.98.tar.gz

$ tarxzvf classpath-0.98.tar.gz

$ cdclasspath-0.98

$ ./configure--disable-examples --without-x --disable-qt-peer --disable-gtk-peer--disable-gconf-peer --disable-plugin --disable-alsa --disable-dssi

$ make -i

$ sudomake install -i

注: classpath的默认安装路径为/usr/local/classpath

2.       jamvm相关操作

$ cd~/work/free

$ wget ftp://sourceware.org/pub/libffi/libffi-3.0.10.tar.gz

$ tarxzvf libffi-3.0.10.tar.gz

$ cdlibffi-3.0.10

$ ./configure--prefix=/usr/local

$ make

$ sudomake install

$ sudo cpinclude/ffi_common.h /usr/local/include/

$cdi686-pc-linux-gnu/

$ cdinclude/

$ sudo cpffi.h /usr/local/include

$ cd../src/86

$ sudo cpffitarget.h /usr/local/include

$ cd~/work/free

$ wget http://freefr.dl.sourceforge.net/project/jamvm/jamvm/JamVM%201.5.4/jamvm-1.5.4.tar.gz

$ tarxzvf jamvm-1.5.4.tar.gz

$ cdjamvm-1.5.4

$ CPPFLAGS="-I/usr/local/include"

$ ./configure --with-classpath-install-dir=/usr/local/classpath -enable-ffi

$ make

$ sudomake install

3.       验证jamvm

1> 已知源代码~/work/free/jamvm-1.5.4/java/helloworld.java:


public class helloworld {

    public static void main(String[] args) {

        System.out.println(“hello world!”);

    }

}

2> 编译 javac helloworld.java

生产helloworld.class

3> 执行jamvm helloworld 打印结果:

helloworld!

此时我们在查看CLASSPATH, LD_LIBRARY_PATH,发现:

[email protected]:~$echo $CLASSPATH

[email protected]:~$echo $LD_LIBRARY_PATH

:/usr/local/lib

cd ~/work/free/jamvm-1.5.4/java/

[email protected]:~/work/free/jamvm-1.5.4/java$jamvm test

helloworld!

可以看到,CLASSPATH与LD_LIBRARY_PATH并不需要设置成之前说的, jamvm –version显示的那些路径!!!

最后,希望该文能对遇到同样问题的兄弟们起到一定帮助!

Ubuntu12.04下jamvm1.5.4+classpath-0.98成功运行 helloworld.class

时间: 2024-10-13 08:24:41

Ubuntu12.04下jamvm1.5.4+classpath-0.98成功运行 helloworld.class的相关文章

ubuntu12.04下编译 全志A33 android6.0 源码

有错误请指出. 入职4天了,为了编译android6.0搞的很烦,遇到了很多问题,会将我遇到的问题写出来,做个总结. 我用的是ubuntu12.04,16.04应该也是可行的. 编译时遇到的问题大部分是缺少包的问题,编译之前首先 我装完ubuntu自带了openjdk7,但是之前读开发手册需要jdk1.6,先去下载jdk-6-linux-64.bin安装过后,配置环境变量,配置环境变量后 执行以下命令,单单是编译,这里有很多都不需要,不过为了以防万一 $sudo apt-get install

Ubuntu12.04下jamvm1.5.4+classpath-0.98成功执行 helloworld.class

经过两天的努力,总于在ubuntu以下编译好classpath-0.98与jamvm1.5.4,并能成功的运行类文件:jamvm hellowold,当屏幕上打印出"hello world!"的时候,按捺不住一阵兴奋!在这两天中,运行jamvm hellowold始终被有三类异常: 1) Exceptionoccurred while VM initialising java/lang/NoClassDefFoundError: java/lang/Thread 2) Exceptio

ubuntu12.04下hadoop1.04环境搭建

(1)我的电脑环境 (2)jdk1.6的安装 由于Ubuntu12.04自带了openjdk6,所以,在终端输入java -version后会现实如下提示: 表示jdk已经安装完成了.接下来是配置环境变量. openjdk6的安装目录是在/usr/lib/jvm下 (3)设置环境变量 #set Java Environment export  JAVA_HOME=/usr/lib/jvm/java-6-openjdk export  CLASSPATH=.:$JAVA_HOME/lib/:$CL

ubuntu12.04下安装python3.4

ubuntu12.04下apt-get默认安装python3是3.2版本,因此需要自己更新源来安装python3.4 (目前的最新版本,以后需要更新的版本方法相同) 添加源以及安装步骤如下: sudo apt-get install python-software-properties #没有这步,下一步会提示add-apt-repository未找到. sudo add-apt-repository ppa:fkrull/deadsnakes #添加ppa源 sudo apt-get upda

Ubuntu12.04下搭建Java环境

1.认识需要配置的环境变量 1). PATH: 作用是指定命令搜索路径,打开/etc/environment可以看到PATH变量的值,该变量包含了一系列的路径.那些路径都是一些经常使用的系统命令的目录地址,如:./sbin./bin等.在bash终端执行命令时,系统会自动到PATH变量所指定的路径中查找是否能找到相应的命令程序.因此,我们需要把jdk安装目录下的bin目录增加到现存的PATH变量中让使用java命令如同系统命令一样方便. 2). CLASSPATH: 作用是指定类搜索路径,让jv

ubuntu12.04下搭建ftp服务器

楼主想把同学硬盘里面的200多G电影共享给实验室的小伙伴们看,就打算在内网服务器上搭建一个ftp的服务器. 1.安装ftp 首先在终端下键入如下内容,安装ftp服务器: sudo apt-get install vsftpd 2.配置ftp 修改ftp的配置文件,该文件在/etc目录下,在终端中键入如下命令以打开配置文件: sudo gedit /etc/vsftpd.conf 简单的修改以下几个配置项即可: #禁止匿名访问 anonymous_enable=NO #接受本地用户 local_e

ubuntu12.04下搭建ftpserver

楼主想把同学硬盘里面的200多G电影共享给实验室的小伙伴们看,就打算在内网server上搭建一个ftp的server. 1.安装ftp 首先在终端下键入例如以下内容,安装ftpserver: sudo apt-get install vsftpd 2.配置ftp 改动ftp的配置文件,该文件在/etc文件夹下,在终端中键入例如以下命令以打开配置文件: sudo gedit /etc/vsftpd.conf 简单的改动下面几个配置项就可以: #禁止匿名訪问 anonymous_enable=NO

Aircrack-ng在ubuntu12.04下使用

Aircrack-ng其实是一个很简单同时很强大的无线渗透工具,作为21世纪黑客,可谓是居家旅行,杀人防火之必备. 它的原理是这样的: airmon-ng用来将无线网卡置为混杂模式以捕获无线数据包: airodump-ng真正用来抓取数据包: aireplay-ng用来对目标发起arp攻击,用来刺激无线ap产生握手包: aircrack-ng用来破解保存的无线数据包得到密码. 用法: 针对WEP方式加密的ap的破解: 1.airmon-ng start YOUR WIRELESS CARD 2.

基于Ubuntu12.04下的Keystone源码安装

Keystone 概述:Keystone 作为Openstack最早期的核心项目独立发展,由于Openstack 采取的设计理念也是所有一切皆API,因此设计服务API的调用脱离不了Keystone.Keystone 作为Openstack 中身份认证服务,在Openstack起到非常关键的作用,并且实现了Identity API 供Openstack 其他组件间进行身份验证 Keystone 两种认证方式:UUID认证的原理当用户拿着有效的用户名和密码去keystone认证后,keystone