典型的C程序将被编译,组装,链接和加载。我知道Java可以与JVM一起使用并生成字节代码。是否可以使用链接器连接两个“目标文件”?例如,通过使用链接器并链接两个目标文件,可以一起使用C程序和C ++程序。
可以在C和Java之间完成相同的操作吗?
答案 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没有用,但机器代码最终必须采用普通链接器可以理解的形式。您可能需要一些汇编程序粘合代码才能在两者之间调用。