我想使用 LLVM 将 Java 编译为 Javascript,如下所示:
- *.java 到 *.class,通过 Oracle 的 javac
- *.class 到 *.bc,通过 vmkit 的 vmjc
- 使用 JS 将*.bc 转换为 *.html,通过 emscripten 的 emcc
创建的 HTML/JS 文件(约 170KB 大)打开时会在浏览器控制台中打印 ReferenceError: _StartJnjvmWithoutJIT is not Define
。尝试调试它时,我注意到 *.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
代码中,这是一个问题吗?
最佳答案
您可以通过使用 GWT 将 Java 直接编译为 JavaScript 来缩短路线。
关于java - LLVM:无法让 vmjc 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19902556/