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

3

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

那么在C和Java之间是否也能做到这一点呢?

4个回答

5

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

你可以使用Java本地接口(JNI)从Java中调用已编译的C或C++代码:

Java本地接口(JNI)使得Java编程语言中编写的代码能够与其他语言(如C和C++)编写的代码集成。它允许程序员充分利用Java平台,而无需放弃对旧代码的投资。


3

1
博客文章附带了几个实现:http://depth-first.com/articles/2006/10/16/compiling-c-to-java-bytecode/ - Aaron Digulla
1
当然,将C语言翻译成字节码并不是真正的C语言——在Java字节码中,许多合法的C语言操作是不合法的。 - Hot Licks

2
不行,至少目前没有常用的工具可以做到。由javac生成的“目标文件”(非正式称为“字节码”)是程序在堆栈机器上的硬件无关表示形式(与旧的"P-Code"系统所用的形式并没有太大区别)。
有各种工具可以将Java字节码转换为各种硬件体系结构的可执行文件,但都相当专业化——我不知道有任何一个可以生成可链接模块的工具。

2
GCC可以将Java编译成类文件,然后使用gcj将其编译为可执行的汇编代码。
据我所知,直接将Java和C结合起来并不实用,但机器码最终必须以正常链接器可以理解的形式呈现。你可能需要一些汇编粘合代码来在两者之间进行调用。

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