Java编译器对象代码(字节代码?)

时间:2012-03-15 16:56:37

标签: java c gcc compiler-construction linker

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

可以在C和Java之间完成相同的操作吗?

4 个答案:

答案 0 :(得分:5)

您无法直接将已编译的C代码与已编译的Java代码链接起来。

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

  

Java Native Interface(JNI)支持将用Java编程语言编写的代码与用C和C ++等其他语言编写的代码集成在一起。它允许程序员充分利用Java平台,而不必放弃对遗留代码的投资。

答案 1 :(得分:3)

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

请参阅http://en.wikipedia.org/wiki/Java_virtual_machine#C_to_bytecode_compilers

答案 2 :(得分:2)

不,至少没有任何常用工具。 javac产生的“目标文件”(非正式地)称为“字节码”,是堆栈计算机程序的硬件独立表示(与用于旧"P-Code"系统的程序没有太大区别)

有各种工具可以将Java字节码转换为各种硬件架构的可执行文件,但所有这些工具都非常专业 - 我所知道的并不能生成可链接的模块。

答案 3 :(得分:1)

GCC可以将Java编译为类文件,然后编译为可执行汇编程序代码using gcj

AFAIK,直接组合Java和C没有用,但机器代码最终必须采用普通链接器可以理解的形式。您可能需要一些汇编程序粘合代码才能在两者之间调用。