LLVM:无法让vmjc工作

时间:2013-11-11 09:09:56

标签: java llvm emscripten

我想用这样的LLVM将Java编译为Javascript:

  • * .java to * .class,来自Oracle的javac
  • * .class to * .bc,via vmkit's 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代码中,这是一个问题吗?

2 个答案:

答案 0 :(得分:0)

您可以使用GWT将Java直接编译为JavaScript来缩短路径。

答案 1 :(得分:-2)

Java和JavaScript是两种不同的语言。交叉编译很棘手,主要导致代码笨拙。

我个人建议在Typescript中手动重新实现核心逻辑,因为它支持经典的OO(面向对象)开发和类型安全。以这种方式翻译代码是耗时的,但相对容易。

或者,本机JavaScript中的OO样式编程也是可能的。但由于缺乏类型保存,这种方式的开发更难。 http://addyosmani.com/resources/essentialjsdesignpatterns/book/