我想用 LLVM 将 Java 编译为 Javascript,如下所示:
- *.java 到 *.class,通过 Oracle 的 javac
- *.class 到 *.bc,通过 vmkit 的 vmjc
- *.bc 到 *.html 与 JS,通过 emscripten 的 emcc
创建的 HTML/JS 文件(大约 170KB 大)ReferenceError: _StartJnjvmWithoutJIT is not defined
在打开时会在浏览器控制台中打印。尝试对此进行调试时,我注意到 *.bc 文件 (LLVM IR) 甚至似乎都不包含我的代码,即我正在打印的字符串不在其中。
我做了什么:
vmjc -disable-opt -main=MyTest MyTest.class
无论我使用 Java 6 还是 7,它都会打印出来:
WARNING: Class file 'java/lang/VMString' requires Java version 1.7. This JVM only supports Java versions up to 1.6.
*.bc
无论如何它都会创建一个文件。*.ll
当我将其转换为非二进制(MyTest_main
不过,那里确实出现了一个类似的字符串:
llvm-dis MyTest.class.bc
那么,这种方法是否可行?关于 Java 版本的警告是什么意思?为什么我的“hello world”字符串没有出现在*.ll
代码中,这是个问题吗?