zoukankan      html  css  js  c++  java
  • 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 <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显示的那些路径!!!

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

  • 相关阅读:
    数据切分——Mysql分区表的建立及性能分析
    MySQL性能优化的21个最佳实践 和 mysql使用索引
    MySQL性能优化的21个最佳实践 和 mysql使用索引
    mysql分表的3种方法
    mysql分表的3种方法
    css3基本属性
    elemet-ui图标—特殊字符的unicode编码表
    css属性之统一设置文本及div之间的对齐方式
    vue-cli创建项目
    element-ui修改全局样式且只作用于当前页面
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4084566.html
Copyright © 2011-2022 走看看