CLDC1.1+MIDP2.0的编译问题
2006-08-31 15:13
281 查看
经过实验,包括windows和linux平台,cldc1.1可以和MIDP2.0编译通过 ,只是需要对MIDP2.0作一些修改,CLDC1.1没有做过修改 ,编译的MIDP可执行文件只做了一个简单的测试(运行附带的pushpuzzle游戏)
步骤如下
一 修改java部分代码,主要是两部分
1 所有用到com.sun.cldc.io.GeneralBase.iowait()的地方一律用
com.sun.cldc.io.Waiter.waitForIO()代替,并修改import 。
2 对于com.sun.cldc.io.j2me.datagram.DatagramObject类 ,因为他继承自cldc1.0.4 中的com.sun.cldc.io.GeneralBase,所以要么在cldc1.1代码中加上 com.sun.cldc.io.GeneralBase类,要么实现 com.sun.cldc.io.j2me.datagram.DatagramObject中Datagram的方法。
我选择了把 GeneralBase类中的代码复制到DatagramObject的方式,又另行实现了四个关于关于float和double的方法,实现方式参考了 java.lang.DataInputStream和java.lang.DataOutputStream
二 修改C代码
1 修改midp2.0fcs/src/share/native/kvm目录下的midpEvents.c中个的以下三个函数
void Java_com_sun_midp_lcdui_Events_open(void);
void Java_com_sun_midp_lcdui_Events_readInt(void);
void Java_com_sun_midp_lcdui_Events_readUTF(void);
其中的函数调用参照j2me_cldc/kvm/VmCommon/src中的events.c中的实现,具体修改如下
void Java_com_sun_midp_lcdui_Events_open(void) {
//放空
}
void Java_com_sun_midp_lcdui_Events_readInt(void) {
JVM_EventsReadInt();
}
void Java_com_sun_midp_lcdui_Events_readUTF(void) {
JVM_EventsReadUTF();
}
这么作是否正确目前没有经过详细测试。不能保证一定对。
2 宏
a: midp2.0fcs/src/${platform}/nativemidpmachine_md.h中加入#include <setjmp.h>
b: midp2.0fcs/src/share/native/kvm/midpServices.c中的75行改为 THROW(status)
c: midp2.0fcs/src/solaris/native/machine_md.h 中的 SLEEP_UNTIL 宏定义改为 SLEEP_FOR
3 关于预验证器的问题,如果出现段错误的错误提示,可以尝试将j2me_cldc/tools/preverifier/src/convert_md.c文件中的 int utf2native(const char* from, char* to, int buflen) 函数的
memcpy(to, from, buflen);
改为
int i=0;
while(from[i++]!='/0');
memcpy(to, from, i);
三 修改makefile
1 midp2.0fcs/build/share/makefiles目录下的Defs.gmk文件中加入fp相关C文件名称,fp_math.c以及resource.c
2 midp2.0fcs/build/share/makefiles/kvm目录下的VM.gmk文件中的vpath中附加上cldc1.1中fp的源码目录名称 即 vpath %.c $(KVM_DIR)/kvm/VmExtra/src/fp
四 编译,和CLDC1.0.4+MIDP2.0一样,在windows和Linux都试过,是可行的。
windows环境 windows2000+cygwin+cl+link+jdk1.3
linux环境 ubuntu6.06+gcc3.4+jdk1.4.2
在windows上编译的MIDP.exe测试了PushPuzzle游戏,一切正常。
在linux下面编译的MIDP可执行文件在执行是时出现一些问题,首先是MIDlet加载后看不到MIDlet列表,等待一会直接按soft2可以进入游戏 ,这时使用鼠标控制游戏时速度有些慢 ,使用键盘控制则正常,具体原因目前还不清楚。
步骤如下
一 修改java部分代码,主要是两部分
1 所有用到com.sun.cldc.io.GeneralBase.iowait()的地方一律用
com.sun.cldc.io.Waiter.waitForIO()代替,并修改import 。
2 对于com.sun.cldc.io.j2me.datagram.DatagramObject类 ,因为他继承自cldc1.0.4 中的com.sun.cldc.io.GeneralBase,所以要么在cldc1.1代码中加上 com.sun.cldc.io.GeneralBase类,要么实现 com.sun.cldc.io.j2me.datagram.DatagramObject中Datagram的方法。
我选择了把 GeneralBase类中的代码复制到DatagramObject的方式,又另行实现了四个关于关于float和double的方法,实现方式参考了 java.lang.DataInputStream和java.lang.DataOutputStream
二 修改C代码
1 修改midp2.0fcs/src/share/native/kvm目录下的midpEvents.c中个的以下三个函数
void Java_com_sun_midp_lcdui_Events_open(void);
void Java_com_sun_midp_lcdui_Events_readInt(void);
void Java_com_sun_midp_lcdui_Events_readUTF(void);
其中的函数调用参照j2me_cldc/kvm/VmCommon/src中的events.c中的实现,具体修改如下
void Java_com_sun_midp_lcdui_Events_open(void) {
//放空
}
void Java_com_sun_midp_lcdui_Events_readInt(void) {
JVM_EventsReadInt();
}
void Java_com_sun_midp_lcdui_Events_readUTF(void) {
JVM_EventsReadUTF();
}
这么作是否正确目前没有经过详细测试。不能保证一定对。
2 宏
a: midp2.0fcs/src/${platform}/nativemidpmachine_md.h中加入#include <setjmp.h>
b: midp2.0fcs/src/share/native/kvm/midpServices.c中的75行改为 THROW(status)
c: midp2.0fcs/src/solaris/native/machine_md.h 中的 SLEEP_UNTIL 宏定义改为 SLEEP_FOR
3 关于预验证器的问题,如果出现段错误的错误提示,可以尝试将j2me_cldc/tools/preverifier/src/convert_md.c文件中的 int utf2native(const char* from, char* to, int buflen) 函数的
memcpy(to, from, buflen);
改为
int i=0;
while(from[i++]!='/0');
memcpy(to, from, i);
三 修改makefile
1 midp2.0fcs/build/share/makefiles目录下的Defs.gmk文件中加入fp相关C文件名称,fp_math.c以及resource.c
2 midp2.0fcs/build/share/makefiles/kvm目录下的VM.gmk文件中的vpath中附加上cldc1.1中fp的源码目录名称 即 vpath %.c $(KVM_DIR)/kvm/VmExtra/src/fp
四 编译,和CLDC1.0.4+MIDP2.0一样,在windows和Linux都试过,是可行的。
windows环境 windows2000+cygwin+cl+link+jdk1.3
linux环境 ubuntu6.06+gcc3.4+jdk1.4.2
在windows上编译的MIDP.exe测试了PushPuzzle游戏,一切正常。
在linux下面编译的MIDP可执行文件在执行是时出现一些问题,首先是MIDlet加载后看不到MIDlet列表,等待一会直接按soft2可以进入游戏 ,这时使用鼠标控制游戏时速度有些慢 ,使用键盘控制则正常,具体原因目前还不清楚。
相关文章推荐
- J2ME(CLDC1.1/MIDP2.0)简介
- 从 .net 1.1 升级到 2.0过程中遇到的问题及解决方法
- 编译midp2.0
- AFNetworking 2.0 编译不过的问题修复
- AFNetworking 2.0 编译不过的问题修复
- ASP.NET 1.1 升级至ASP.NET 2.0 十大问题(转)
- studio2.0+ndk-r11 中jni编译问题
- 树莓派编译OpenCV时libgtk2.0-dev安装问题
- Asp.net1.1升级到2.0遇到的一些问题总结
- .NETFramework1.1和2.0共用 “服务器应用程序不可用”问题
- PJSIP2.0使用以及交叉编译存在问题解决
- 从ASP.NE T 1.1升级到ASP.NET 2.0需要考虑的Cookie问题
- AFNetworking 2.0 编译不过的问题修复
- (收藏)从ASP.NE T 1.1升级到ASP.NET 2.0需要考虑的Cookie问题
- 从 .net 1.1 升级到 2.0过程中遇到的问题及解决方法
- Asp.net1.1升级到2.0遇到的一些问题总结
- Hadoop 2.0 编译问题小结
- 浮点数精度问题(2.0-1.1=0.8999999999)
- PJSIP2.0使用以及交叉编译存在问题解决
- .NET 1.1移植到.NET 2.0出现的一些小问题的解决