在JVM上运行/解释C?

有没有办法在JVM上运行普通的c代码?
不通过JNI连接,运行,就像你可以通过JRuby运行ruby代码,或通过Rhino运行javascript。

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

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

更新日期2012-01-26:根据公司网站上的此页面,该产品已被买断,不再可用。

是。

这是一个生成JVM字节码的商业C编译器 。

还有两种可能性,都是开源的:

JPC在JVM中模拟整个x86 pc,并且能够运行DOS和Linux。

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

也许不完全是你需要的,但商业选择是http://www.axiomsol.com/

似乎LLJVM也可以满足您的要求。

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

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