2009-01-07 33 views
20

有没有办法在JVM之上运行纯C代码?
不通过JNI连接,运行,就像你可以通过JRuby运行Ruby代码,或通过Rhino运行JavaScript。在JVM之上运行/解释C?

如果没有当前的解决方案,您会推荐我应该做什么?
显然我想尽可能多地使用部分解决方案来实现它。

ANTLR似乎是一个很好的开始,有一个完整的“ANSI C”语法实现......
我应该使用ANTLR生成的代码在JVM上构建一个“玩具”VM吗?

+0

这很有趣..试图制作一些* portable * c代码? – 2009-01-07 20:41:13

+2

尝试通过共同点(JVM)交互不同的代码(来自不同语言) – amitkaz 2009-01-07 21:05:48

+0

从查看JVM规范开始已经很长时间了,但是IIRC试图防止数据类型转换过快和松散。如果情况仍然如此,那么您将无法在JVM上运行C程序。 – 2009-01-07 22:10:45

回答

11

还有其他两种可能性,无论是开源:

JPC模仿JVM中的整个的x86 PC,并且能够运行DOS和Linux系统的。

NestedVM为Java字节码提供二进制翻译。这是通过将GCC编译成MIPS二进制文件然后将其转换为Java类文件来完成的。因此,用C,C++,Fortran或GCC支持的任何其他语言编写的任何应用程序都可以在100%纯Java中运行,且不会更改源代码。

3

看来LLJVM也可以满足您的要求。

LLJVM:源代码首先通过前端(如llvm-gcc或clang)编译为LLVM中间表示(IR)。然后将LLVM IR转换为Jasmin汇编代码,与其他Java类相链接,然后汇编成JVM字节码。

2

截至2016年,有一个年轻但很有前途的选项叫做gcc-bridge。其目的是利用JVM R实现来使用用C或Fortran编写的R-libaries。但gcc-bridge也可以作为maven插件独立使用。