2012-03-15 43 views
3

一个典型的C程序将被编译,汇编,链接和加载。我知道Java与JVM协同工作并生成字节码。是否有可能使用链接器连接两个“目标文件”?例如,一个C程序和一个C++程序可以通过使用链接器并链接两个目标文件一起使用。Java编译器对象代码(字节代码?)

C和Java可以做同样的事吗?

回答

5

您不能将编译的C代码与编译的Java代码直接链接。

你可以调用编译的C或C++从Java代码中使用Java Native Interface (JNI)

Java本机接口(JNI),可编写的代码与代码的Java编程语言编写的其他语言如C融合和C++。它允许程序员充分利用Java平台而不必放弃对遗留代码的投资。

+2

+1或JNA,如果你不想写C代码:https://github.com/twall/jna – 2012-03-15 17:01:15

3

如果您将C代码编译为JVM字节码,而不是本地代码,那么这可能是可能的,因此您可以在JVM级别“链接”,而不是通过本机对象链接器。

http://en.wikipedia.org/wiki/Java_virtual_machine#C_to_bytecode_compilers

+1

博客文章有几个实现:http://depth-first.com/articles/ 2006/10/16 /编译-C-to-Java的字节码/ – 2012-03-15 17:03:41

+1

当然,C编译成字节码是不是真的ç - 在C许多法律的事情不是Java字节码的法律。 – 2012-03-15 17:04:42

2

不,至少不会有任何的常用工具。 “对象文件”即javac产生是(非正式地)被称为“字节代码”,并且是一个程序的用于堆机(不同于用于旧"P-Code"系统没有太大的不同)与硬件无关的表示。

有可Java字节代码转换成可执行各种硬件架构的各种工具,但都是相当专业的 - 没有,我知道的产生链接的模块。

1

GCC可以编译Java类文件,然后到可执行的汇编代码using gcj

AFAIK,它不是有用的Java和C直接结合,但机器代码必须最终是这样的形式,正常的链接器可以理解的。您可能需要一些汇编程序胶水代码才能在两者之间进行调用。