jamvm-1.4.3,classpath-0.92移植到arm版上和ubuntu上

移植jamvm虚拟机到arm板

soft environment:

OS:ubuntu11.10

compiler:arm-linux-gcc-4.3.2

transpantation target:

arm-linux-gcc:arm-linux-gcc-4.3.2

java virtual machine:jamvm-1.4.3

classpath:classpath-0.92 

 

一.安装arm-linux-gcc

使用

二.编译classpath-0.92

1.下载

http://savannah.gnu.org/projects/classpath

ftp://ftp.gnu.org/pub/gnu/classpath/

http://www.gnu.ort/software/classpath/

网址中有很多版本的classpath,只要classpath-0.92这个版本的

2.解压

tar -zxvf classpath-0.92 -C ./

解压到当前目录下,获得classpath-0.92文件夹

3.进入classpath-0.92文件夹(整个操作最好都在家目录下运行,不要使用sudo,生成的makefile,也需要sudo,在能够有权限执行)

./configure CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-ld RANLIB=arm-linux-ranlib STRIP=arm-linux-strip --host=arm-linux --disable-gtk-peer --disable-gconf-peer --disable-plugin --with-jikes --with-jni --prefix=/home/cp/classpath

CC详解:

CC  是编译的前端程序,它通过调用其他程序来实现将程序源文件编译成目标文件的功能编译时,它首先调用预处理程序(cpp)对输入的源程序进行处理,然后调用 cc1 将预处理后的程序编译成汇编代码,最后由arm-elf-as将汇编代码编译成目标代码。

CC具有丰富的命令选项,可以控制编译的各个阶段,满足用户的各种编译需求。

AS详解:

AS将汇编语言程序转换为ELF (Executable and Linking Format,执行时链接文件格式)格式的可重定位目标代码,这些目标代码同其它目标模块或函数库易于定位和链接。

AS产生一个交叉参考表和一个标准的符号表,产生的代码和数据能够放在多个区 (Section)中。

AR详解:

AR 将多个可重定位的目标模块归档为一个函数库文件。采用函数库文件,应用程序能够从该文件中自动装载要参考的函数模块,同时将应用程序中频繁调用的函数放入函数库文件中,易于应用程序的开发管理。arm-elf-ar支持ELF格式的函数库文件.

用来管理和维护静态库,但是不更新库的符号索引表,更新库的符号索引表的工作由ranlib或者ar -s来实现

RANLIB详解

RANLIB 是用来更新库的符号索引表,向某一个库文件增加了一个.o文件之后,必须是用ranlib来更新符号索引表,才能访问刚刚增加的.o的中全局变量和函数。

LD详解:

LD根据链接定位文件Linkcmds中的代码区、数据区、BSS区和栈区等定位信息,将可重定位的目标模块链接成一个单一的、绝对定位的目标程序。该目标程序是ELF格式,并且可以包含调试信息。

LD会产生一个内存映象文件Map.txt,该文件显示所有目标模块、区和符号的绝对定位地址。它也产生交叉参考列表,显示参考每个全局符号的目标模块。

LD支持将多个目标模块链接成一个单一的、绝对定位的目标程序,也能够依此对目标模块进行链接,这个特性称为增量链接(Incremental Linking)。

假如输入文件是一个函数库,arm-elf-ld会自动从函数库装载被其它目标模块参考的函数模块。LD与其它链接程序相比,能提供更有帮助的诊断信息。许多链接器遇到第一个错误即放弃链接,而arm-elf-ld只要有可能都继续执行,帮助用户识别其它错误,有时甚至能获得输出代码。 

 

STRIP详解

主要用来去除执行文件或者库文件的调试信息。

--disable-gtk-peer

--disable-gconf-peer 这个表示编译的类库不支持窗口调用

 

--disable-plugin 还不知道

 

--with-jikes

--with-jni

这两个还不知到

--prefix 指定make install 的时候 将classpath库文件安装的位置

4.make;make install

注意 以上动作都最好在自己家目录进行操作,并且不要用sudo

 

三.编译jamvm-1.4.3

1.下载,

比较好的网站是在sourceforge.net这个网站搜索jamvm

找到jamvm-1.4.3.tar.gz

2.解压

tar -zxvf jamvm-1.4.3.tar.gz -C ./

获得jamvm-1.4.3文件夹

3.进入jamvm-1.4.3文件夹

./configure CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-ld CPP=arm-linux-cpp RANLIB=arm-linux-ranlib STRIP=arm-linux-strip --host=arm-linux --prefix=/home/cp/jamvm --with-class-path-install-dir=/home/cp/classpath

--with-class-path-install-dir 表示classpath安装的目录

--frefix 表示自己安装的目录

 

四.移植classpath和jamvm

通过以上步骤之后会获取到classpath和jamvm两个文件

将这两个文件复制到开发板上

要注意的是,classpath/lib/classpath 这个文件夹下是库文件,有很多的.a或者.la等静态库文件,也有.so*动态库文件,还有链接到动态库文件的软链接文件(他们必须依赖他们所链接动态库文件),一定要将这三个类型的文件复制过去,链接文件作为动态库文件的别名,让动态库文件具有更好的通用性。所以软件接文件一定要有

如果是在相同的文件系统下进行复制的话,cp命令满足以下规则

       不带参数的cp对链接文件进行复制的时候,会直接复制动态库文件的副本,这样做其实也可以,但是这样就会增加整个库文件的大小,所以要保证复制的是软连接文件,那么一定要加上-l 参数

如果在不同的文件系统下进行复制的话,

       1.这样就必须是用不带参数的cp,保证复制了具有软链接名的动态库文件副本

      2.先不复制软件文件,在移植的系统上进行 “ln -s  动态链接库 软连接库名 ” 这个名进行一个个的创建

 

如果在相同的文件系统下进行移动的话

        不带参数的mv,直接就具有保存软链接文件 的连接属性的功能,所以在相同文件系统下进行移动软链接的话,使用不带参数的mv是一个比较好的选择

但是在不同的文件系统下进行移动的话,mv就无能为力了,

 

经过上面的步骤之后,基本上已经一直完成,还有一个步骤就是在arm板上配置环境变量BOOTCLASSPATH,PATH,LD_PIBRARY_PATH的位置

我将classpath和jamvm移植到了/opt下

下面是我配置的路径

export BOOTCLASSPATH=/opt/jamvm/share/jamvm/classes.zip:/opt/jamvm/lib/classpath/share/classpath/glibj.zip
export LD_LIBRARY_PATH=/opt/jamvm/lib/classpath/lib/classpath/
export PATH=$PATH:/opt/jamvm/bin/

还有一种写法

BOOTCLASSPATH=/opt/jamvm/share/jamvm/classes.zip:/opt/jamvm/lib/classpath/share/classpath/glibj.zip
LD_LIBRARY_PATH=/opt/jamvm/lib/classpath/lib/classpath/
PATH=$PATH:/opt/jamvm/bin/

export BOOTCLASSPATH LD_LIBRARY_PATH PATH

将以上命令写入/etc/profile下面(我在我的arm板上试过写在/etc/init.d/rcS下面,重启之后不行,但是写在profile下就可以),重新启动一下,就行了

还有一些环境变量CLASSPATH,实际上,我们是不需要配置的,如果配置了的话,那么我们的.jar文件只能在CLASSPATH这个环境变量下指定的目录下进行工作

五.在arm上运行程序

遇到了如下的问题

1:

使用 jamvm -jar a.jar   (要注意的是,在linux(arm板上或者是ubuntu上)的命令行下,一定不要只运行.class文件,而是要运行.jar文件,对于单个文件的工程生成j.ar好说,但是对于多个文件或者说是多个工程生成.jar文件包,则在eclipse下是可以使用某一个插件的,至于是哪一个插件,暂时忘记了名字)

cannot create system class loader

Exception ocuured whiel printing exception(java/lang/NoClassDefFoundError)...

Original exception was java/lang/UnsatisfiedLinkError

这个错误实际上是,刚刚复制的过程中classpath/lib/classpath这个文件夹下的软链接文件没有复制过来,我是使用sd卡拷贝的,所以遇到了这个情况,所以

解决方法:1.按原来的classpath/lib/classpath路径下,在这个文件夹下增加这些软链接文件,或者直接使用不带参数的cp,这样,库文件就会变得比较大一点

如果是同一个文件系统下的复制的话,就不会出现上述的问题了

2.使用jamvm -verbose:class -jar a.jar 就会看到一些调试信息,让我可以定位到时哪一个地方出现了问题

3.千万不要直接运行.class 文件,会出现问题的,要打成.jar包



 

 

  

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值