很多软件都有动态创建java虚拟机的需要,对此我们可以用java的jni接口来实现。j2se的jvm比较大,带的东西比较多,对于产品发布来讲往往不是首选。另外,j2se对应的开源工程hotspot相当庞大,不好修改和编译。所以,j2me对应的开源工程phoneme就成为一个不错的选择。
phoneme的简单性也是相对而言,在windows平台下编译绝非易事。当然,这只是对我这种不太懂linux makefile的人来说。另外网上这方面的资料也很少,说的不够详细。我是花了不少时间才把它搞定,以下是我的几点经验总结。
1. 用VC直接编译是不行的,用mingw也搞不定,只能用cygwin.
2. 编译之前需要安装vs、j2se jdk以及cygwin.
3. 因为我编译的是cdc,需要与cdc处在同一父目录的tools目录。
4. 把cdc和tools目录拷贝到磁盘根目录,不要放到有空格的目录中。我一开始是放在非根目录下,目录名还没有空格,结果怎么都编不成功。
5 运行cygwin后,把cdc和tools目录mount到cygwin的根目录下。如:mount c:/cdc /cdc mount c:/tools /tools
6. 最好把jdk也mount到cygwin的根目录下来。
7. 设置环境变量,JDK_HOME指向jdk目录,TOOLS_DIR指向刚才moun进来的tools目录
export JDK_HOME="/jdk"
export TOOLS_DIR="/tools"
8 修改cdc/build/win32-x86-vc8里面的defs.mk,主要是修改里面几个指向VS目录的路径,默认是在C盘。
9 用cd命令进入cdc/build/win32-x86-vc8,然后输入make命令进行编译。make命令可带编译宏定义,如CVM_DEBUG CVM_PRELOAD_LIB等。J2ME_CLASSLIB比较重要,用来指定需要编译哪一个profile.
目前就这些,我现在还有一些不是很明白的地方,需要后续的探索。