有没有办法在JVM上运行普通的c代码?
不通过JNI连接,运行,就像你可以通过JRuby运行ruby代码,或通过Rhino运行javascript。
如果目前没有解决方案,你建议我做什么? 显然,我想尽可能多地使用部分解决方案来实现它。
ANTLR似乎是一个很好的起点,拥有完整的“ANSI C”语法实现......
我应该使用ANTLR生成的代码在JVM上构建一个“玩具”VM吗?
答案 0 :(得分:13)
2012-01-26更新:根据this page on the company's site,该产品已被买断,不再可用。
是
答案 1 :(得分:11)
还有两种可能性,都是开源的:
JPC在JVM中模拟整个x86 pc,并且能够运行DOS和Linux。
NestedVM为Java字节码提供二进制翻译。这是通过将GCC编译为MIPS二进制文件来完成的,然后将其转换为Java类文件。因此,用C,C ++,Fortran或GCC支持的任何其他语言编写的任何应用程序都可以在没有源更改的情况下以100%纯Java运行。
答案 2 :(得分:8)
可能不完全符合您的要求,但商业选项是http://www.axiomsol.com/
答案 3 :(得分:3)
似乎LLJVM也可以满足您的要求。
LLJVM:源代码首先由llvm-gcc或clang等前端编译为LLVM中间表示(IR)。然后将LLVM IR转换为Jasmin汇编代码,与其他Java类链接,然后汇编为JVM字节码。
答案 4 :(得分:2)
截至2016年,有一个名为gcc-bridge的年轻但有争议的选项。它的目的是利用JVM R实现来使用用C或Fortran编写的R-libaries。但是gcc-bridge也可以作为maven插件独立使用。