Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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
用gem5(或任何非C语言)运行Java程序_Java_Gem5 - Fatal编程技术网

用gem5(或任何非C语言)运行Java程序

用gem5(或任何非C语言)运行Java程序,java,gem5,Java,Gem5,这可能是一个愚蠢的问题,但我最近正在学习gem5,我能够使用该软件在系统调用仿真和完整系统仿真中模拟我的C程序。但是,每当我尝试在其中模拟任何Java程序时,都会出现以下错误(系统调用模拟): 在本例中,我尝试了一个简单的mergesort Java程序。它在gem5模拟器外部正常编译和执行。在我的机器所在的.py文件中(它是gem5教程的simple.py),二进制文件是指向.jar文件的路径。我听说.jar在gem5中不能正常工作,但我不知道该用什么来代替。 那么,在gem5模拟器中运行非C

这可能是一个愚蠢的问题,但我最近正在学习gem5,我能够使用该软件在系统调用仿真和完整系统仿真中模拟我的C程序。但是,每当我尝试在其中模拟任何Java程序时,都会出现以下错误(系统调用模拟):

在本例中,我尝试了一个简单的mergesort Java程序。它在gem5模拟器外部正常编译和执行。在我的机器所在的.py文件中(它是gem5教程的simple.py),二进制文件是指向.jar文件的路径。我听说.jar在gem5中不能正常工作,但我不知道该用什么来代替。 那么,在gem5模拟器中运行非C程序需要做什么?在这种情况下,运行java程序需要做什么

我到处寻找答案,但没能找到。有人能帮我吗?提前谢谢

我正在使用Ubuntu18.04和Java1.8.0_201

编辑:我尝试将Java代码转换为本机代码(x86),并使用GraalVM进行转换,然后将其传递到runscript,与使用C程序的方式相同。但是,它在加载脚本时向我显示了一个新错误:

loading script...
Fatal error: Failed to create a new Isolate. (code 6)

以前从未见过它,在谷歌搜索时也没有发现任何关于它的信息。

您执行Java程序的方式与执行C程序的方式完全相同:

  • Gem5不懂C,所以如果你想执行一个C程序,你首先需要把它编译成Gem5懂的语言,或者你需要用Gem5懂的语言编写的解释器来解释它
  • Gem5不懂Java,因此如果您想执行Java程序,首先需要将其编译为Gem5懂的语言,或者需要在用Gem5懂的语言编写的解释器中对其进行解释
以下是我能想到的几种可能性:

  • 使用本机代码编译器将Java编译为Alpha、ARM、Sparc或x86本机代码
  • 使用以Alpha、ARM、Sparc或x86本机代码编写(或编译)的Java解释器来解释该Java代码
  • 使用JVM编译器将Java编译为JVM字节码,然后使用以Alpha、ARM、Sparc或x86本机代码编写(或编译)的JVM解释该JVM字节码,或
  • 使用JVM编译器将Java编译成JVM字节码,然后使用本机代码编译器将JVM字节码编译成Alpha、ARM、Sparc或x86本机代码

当然,可以链接和/或混合上述任意数量的程序。

执行Java程序的方式与执行C程序的方式完全相同:

  • Gem5不懂C,所以如果你想执行一个C程序,你首先需要把它编译成Gem5懂的语言,或者你需要用Gem5懂的语言编写的解释器来解释它
  • Gem5不懂Java,因此如果您想执行Java程序,首先需要将其编译为Gem5懂的语言,或者需要在用Gem5懂的语言编写的解释器中对其进行解释
以下是我能想到的几种可能性:

  • 使用本机代码编译器将Java编译为Alpha、ARM、Sparc或x86本机代码
  • 使用以Alpha、ARM、Sparc或x86本机代码编写(或编译)的Java解释器来解释该Java代码
  • 使用JVM编译器将Java编译为JVM字节码,然后使用以Alpha、ARM、Sparc或x86本机代码编写(或编译)的JVM解释该JVM字节码,或
  • 使用JVM编译器将Java编译成JVM字节码,然后使用本机代码编译器将JVM字节码编译成Alpha、ARM、Sparc或x86本机代码
当然,可以链接和/或混合上述任意数量的内容。

类似帖子:

一个完整的系统Ubuntu映像几乎肯定可以工作(在运行gem5之前,使用QEMU用户模式预安装Java)

X86系统调用仿真理论上可以正常工作,命令行如下:

build/X86/gem5.opt \
  configs/example/se.py \
  --cmd /usr/bin/java \
  --options HelloWorld \
  --param 'system.cpu[0].workload[:].release = "5.2.1"' \
其中,
/usr/bin/java
是java解释器ELF可执行文件,就像您的C程序一样,
HelloWorld.class
是作为参数传递给
java
的已编译java类

然而,我在Ubuntu 18.04和gem5 61005bb9ef455b2ac851f8a992f2cec5686e520f上尝试了这个,但失败了:

/usr/bin/java:加载共享库时出错:libjli.so:无法打开共享对象文件:没有这样的文件或目录

我不知道为什么会这样,需要进一步调查

与Python类似:

类似的帖子:

一个完整的系统Ubuntu映像几乎肯定可以工作(在运行gem5之前,使用QEMU用户模式预安装Java)

X86系统调用仿真理论上可以正常工作,命令行如下:

build/X86/gem5.opt \
  configs/example/se.py \
  --cmd /usr/bin/java \
  --options HelloWorld \
  --param 'system.cpu[0].workload[:].release = "5.2.1"' \
其中,
/usr/bin/java
是java解释器ELF可执行文件,就像您的C程序一样,
HelloWorld.class
是作为参数传递给
java
的已编译java类

然而,我在Ubuntu 18.04和gem5 61005bb9ef455b2ac851f8a992f2cec5686e520f上尝试了这个,但失败了:

/usr/bin/java:加载共享库时出错:libjli.so:无法打开共享对象文件:没有这样的文件或目录

我不知道为什么会这样,需要进一步调查


与Python类似:

很抱歉我不知道,但是我如何将java程序编译成x86本机代码?在讨论这个话题之前,我有一点这样的想法,但我找不到任何方法。我读过gcj可以这样做,但由于它已经过时,我无法安装它。你知道代码块吗?每当我把我的C程序编译成它时,它就会生成一个正常工作的二进制文件。java程序还有其他类似的工具吗?很抱歉我不知道,但是我怎样才能将java程序编译成x86本机马赫数呢