Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java编译器目标代码(字节码?)_Java_C_Gcc_Compiler Construction_Linker - Fatal编程技术网

Java编译器目标代码(字节码?)

Java编译器目标代码(字节码?),java,c,gcc,compiler-construction,linker,Java,C,Gcc,Compiler Construction,Linker,一个典型的C程序将被编译、组装、链接和加载。我知道Java与JVM一起工作并生成字节码。是否可以使用链接器连接两个“对象文件”?例如,C程序和C++程序可以通过链接器和链接两个对象文件一起使用。 C和Java之间也可以这样做吗?您不能直接将已编译的C代码与已编译的Java代码链接起来 可以使用:< /p>调用java编译的C或C++代码 java原生接口(JNI)使java编程语言编写的代码与用C语言和C++语言等语言编写的代码集成。它允许程序员充分利用Java平台,而不必放弃对遗留代码的投资

一个典型的C程序将被编译、组装、链接和加载。我知道Java与JVM一起工作并生成字节码。是否可以使用链接器连接两个“对象文件”?例如,C程序和C++程序可以通过链接器和链接两个对象文件一起使用。
C和Java之间也可以这样做吗?

您不能直接将已编译的C代码与已编译的Java代码链接起来

可以使用:< /p>调用java编译的C或C++代码

java原生接口(JNI)使java编程语言编写的代码与用C语言和C++语言等语言编写的代码集成。它允许程序员充分利用Java平台,而不必放弃对遗留代码的投资


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


请参见

否,至少不要使用任何常用工具。
javac
生成的“对象文件”(非正式地)称为“字节码”,是堆栈机器程序的独立于硬件的表示形式(与旧系统的程序没有太大区别)


有各种工具可以将Java字节码转换为各种硬件体系结构的可执行文件,但都相当专业——据我所知,没有一种工具可以生成可链接的模块。

GCC可以将Java编译成类文件,然后再编译成可执行的汇编代码


顺便说一句,直接将Java和C结合起来是没有用的,但是机器代码最终必须是普通链接器能够理解的形式。您可能需要一些汇编器粘合代码来在两者之间进行调用。

博客文章和一些实现:当然,翻译成字节码的C并不是真正的C——C中许多合法的东西在Java字节码中是不合法的。