经过两天的努力,总于在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 <rob@jamvm.org.uk>

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

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

$ tar xzvf classpath-0.98.tar.gz

$ cd classpath-0.98

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

$ make -i

$ sudo make install -i

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

2.       jamvm相关操作

$ cd ~/work/free

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

$ tar xzvf libffi-3.0.10.tar.gz

$ cd libffi-3.0.10

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

$ make

$ sudo make install

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

$cd i686-pc-linux-gnu/

$ cd include/

$ sudo cp ffi.h /usr/local/include

$ cd ../src/86

$ sudo cp ffitarget.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

$ tar xzvf jamvm-1.5.4.tar.gz

$ cd jamvm-1.5.4

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

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

$ make

$ sudo make 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,发现:

lihan@master:~$echo $CLASSPATH

lihan@master:~$echo $LD_LIBRARY_PATH

:/usr/local/lib

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

lihan@master:~/work/free/jamvm-1.5.4/java$jamvm helloworld

helloworld!

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

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

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

  1. 阿里云ubuntu12.04下安装使用mongodb

    阿里云ubuntu12.04下安装mongodb   apt-get install mongodb 阿里云ubuntu12.04下卸载mongodb,同时删除配置文件     apt-get pur ...

  2. [置顶] ubuntu12.04下编译opencv程序

    ubuntu12.04下编译opencv程序 1.在ubuntu下安装好 opencv后(建议使用apt-get install 来安装) 2.使用程序FaceExaple.c来进行测试程序 #inc ...

  3. ubuntu12.04下helloworld驱动从失败到成功过程

    最近在看linux的设备驱动程序,写一个简单的helloworld程序都花了我好久的时间,具体过程如下: 编写helloworld.c 编写Makefile 注意,makefile中的命令那里是一个t ...

  4. ubuntu12.04下NFS链接开发板并测试交叉编译的第一个应用

    思路:配置网络->安装NFS->配置NFS->挂载NFS服务->Down文件执行.Okay lets go! 配置网络: 在配置网络之前,首先咱得搞定与开发板的交互工作,那么这 ...

  5. Linux (Ubuntu12.04) 下开发工具安装和使用

    Linux (Ubuntu12.04) 下开发工具安装和使用 这里讲述的是关于在ubuntu12.04下面安装和使用各种IDE 开发环境和初步使用的知识.说一下背景:很多的开发基本都是在linux操作 ...

  6. 在ubuntu12.04下编译android4.1.2添加JNI层出现问题

    tiny4412学习者,在ubuntu12.04下编译android4.1.2添加JNI层出现问题: (虚心请教解决方法) trouble writing output: Too many metho ...

  7. Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python)

    Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python) 前提是已经安装了python2,python3 1)安装各种依赖库 sudo apt-get update ...

  8. Ubuntu12.04下安ns-3.29及Ubuntu换源方法

    目录 1.下载ns-3.29 2.安装gcc-4.9.2 3.编译.测试ns-3.29 第一种:更新,文章开头说的 第二种,更新源 主机型号:Ubuntu12.04 仿真环境版本:NS-3.29 安装 ...

  9. Ubuntu12.04下Qt连接MySQL数据库

    本文介绍在Ubuntu12.04 (64 bit) 下使用Qt 4.8.2连接MySQL(Ver 14.14 Distrib 5.5.43)数据库. 1.安装 Qt 和 MySQL 若未安装以上软件, ...

随机推荐

  1. 【转】C++实现RTMP协议发送H.264编码及AAC编码的音视频

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...

  2. C的|、||、&、&&、异或、~、!运算(转)

    位运算     位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有:     &(按位与).|(按位或) ...

  3. AS3聊天单行输入框图文混排完美实现

    几年前刚毕业.第一个游戏模块做的就是聊天.到如今.几个游戏写过几次聊天模块. 之前在4399做的<幻龙骑士>(又名<神骑士>),还有上周六刚上线的<疯狂的子弹>, ...

  4. Velocity.js发布:更快的动画切换速度

    Velocity.js是一款动画切换的jQuery插件,它重新实现了jQuery的$.animate()方法从而加快动画切换的速度.Velocity.js只有7k的大小,它不仅包含了$.animate ...

  5. 一个SQL 建表格式

    CREATE TABLE [dbo].[SysSample]([Id] [varchar](50) NOT NULL,[Name] [varchar](50) NULL,[Age] [int] NUL ...

  6. Core Bluetooth 概述 【官方文档翻译】

    Core Bluetooth 框架在Mac和iOS平台,为配备了低功耗蓝牙无线技术的设备提供了进行通信所需要的类.例如,您的应用程序可以发现,探索,和低功耗的外围设备进行交互,如心率监视器.数字温控器 ...

  7. python面向对象(下)

    继承 继承描述了基类的属性如何"遗传"给派生类.一个子类可以继承它的基类的任何属性,不管是数据属性还是方法.创建子类的语法看起来与普通(新式)类没有区别,一个类名,后跟一个或多个需 ...

  8. 在vs.net c#中添加mysql模型

    http://weblogs.asp.net/gunnarpeipman/getting-mysql-work-with-entity-framework-4-0 http://dev.mysql.c ...

  9. C/c++几个预定义的宏:__DATE__,__TIME__,__FILE__,__LINE__

    一边情况下,C/C++编译器会内置几个宏,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息. ANSI C标准中有几个标准预定义宏(也是常用的): __ ...

  10. Codeforces Round #194 (Div. 2) D. Chips

    D. Chips time limit per test:1 second memory limit per test:256 megabytes input:standard input outpu ...