编译C++代码以在JVM上运行

48

在编译C++代码时,你需要使用一个针对目标平台的编译器。是否有一种针对JVM的C++编译器(即将C++代码编译为Java字节码,而不是使用Java“本地”接口)?


1
https://dev59.com/JXRC5IYBdhLWcg3wD83r - chrisaycock
http://en.wikipedia.org/wiki/Java_Virtual_Machine#C_to_bytecode_compilers - chrisaycock
你是因为想从Java中使用一些C++库并且想避免使用JNI而提出这个问题吗?如果是的话,请记住,如果你的C++代码使用了特定于平台的库,那么你将无法在不使用JNI的情况下调用它们... - Laurence Gonsalves
8
哪个JVM JIT编译器输出C++? - Fred Nurk
@bwawok 你说的 JIT 编译器将字节码编译成 C++ 是什么意思? - Koray Tugay
1
@KorayTugay 我不知道,我是5年前写的评论,你可能需要看一下更近期的帖子。 - bwawok
2个回答

36

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


1
你到底为什么想要在Java虚拟机中运行C或C++程序呢? - TheLQ
4
也许楼主羡慕C++/CLI? - chrisaycock
3
实际上,我感兴趣的原因是Mathematica 8现在可以从Mathematica代码生成C语言代码。我想在Java程序中运行用Mathematica编写的代码,而不需要使用MathLink或其他需要最终用户安装额外软件的技术。对我来说,整个想法只存在于概念层面。来源:http://awurl.com/FTlvm62ns - knpwrs
2
@TheLQ: 你到底为什么想要在Java虚拟机中运行C或C++程序? 嗯,对于C++来说,在JVM上拥有完整功能的RAII是一件好事。还有运算符重载。以及,嗯,lambda表达式... :-D - paercebal
@TheLQ 简单的回答是,任何可用的 C 或 C++ 代码都可以在 JVM 上使用。移植、重写等需要时间和金钱。在许多情况下,具有一些测试的编译器是更好的选择。我也可以看到它在一些遗留代码问题上很有用。 - Nick P
显示剩余4条评论

13

就像我在类似的SO问题上所回答的那样,现在有一个新的玩家叫做gcc-bridge。它是一个Maven插件,支持所有gnu语言,如c、c++、fortran。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接