gpt4 book ai didi

java - 如何在 Eclipse 中使用 GraalVM (SubstrateVM) 将 Java 编译为 Native

转载 作者:行者123 更新时间:2023-12-04 12:15:41 25 4
gpt4 key购买 nike

我有一个研究项目(在 Java 8 中实现)将在 Eclipse 中包含几个类、几个主要功能和超过 10000 行的代码。当输入不小时,程序会耗尽内存。

如果编译为 native 应用程序,我想看看它是否会使用更少的堆栈内存。

我发现无法在 Eclipse 中执行此操作。

我做了$GRAALVM_HOME/bin/javac /home/appu/Downloads/2019/June/20/HelloWorld.java有效。我得到了一个有效的二进制文件。

我试过/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image /home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi/decimate/Decimate.class我收到了 Main entry point class '/home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi/decimate/Decimate.class' not found.
我试过/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image /home/appu/eclipse-nimi/NimishaGraalEE19/bin/*我收到了 Main entry point class '/home/appu/eclipse-nimi/NimishaGraalEE19/bin/nimi' not found.
经典

public class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}

编译成“HelloWorld.class”

它给出了一个可执行的“helloworld”,它是可执行的(application/x-executable)。

我可以从 Eclipse 获得相同的信息吗?对于多类文件,我可以从命令行获得相同的信息吗?

当我把上面的代码改成
public class HelloWorld
{
public static void hello()
{
System.out.println("Hello, World!");
}
}

并添加另一个类
public class Main
{
public static void main(String[] args)
{
HelloWorld.hello();
}
}

他们编译正确,但我得到
appu[23]/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image /home/appu/Downloads/2019/June/23/HelloWorld.class 
Build on Server(pid: 17223, port: 36631)
[/home/appu/downloads/2019/june/23/helloworld.class:17223] classlist: 415.66 ms
Error: Main entry point class '/home/appu/Downloads/2019/June/23/HelloWorld.class' not found.
Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
Error: Image build request failed with exit status 1
appu[23]ls
HelloWorld.class HelloWorld.java Main.class Main.java

我想要的是一个可执行文件(在我的例子中是一个 Gnu/Linux 可执行文件),它可以用作 native 可执行文件。

我更喜欢 Eclipse 的解决方案,但欢迎使用命令行、Netbeans、VS Code ……或任何其他技术。

回应 BoriS 的回答:

几个小时前我尝试制作一个 jar,并制作了一个名为 Main.jar 的文件。这没用。
jar cfe Main.jar Main Main.class
/home/appu/Downloads/Apps/GraalVM/2019-06-20/graalvm-ee-19.0.2/bin/native-image -jar /home/appu/Downloads/2019/June/23/Main.jar
./Main

当我运行可执行(应用程序/x-可执行)类型的 Main 时,我得到了
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
at Main.main(Main.java:5)
Caused by: java.lang.ClassNotFoundException: HelloWorld
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more

最佳答案

文档中的两个选项( https://www.graalvm.org/docs/reference-manual/aot-compilation/ ):

1) 构建一个项目的 jar 并从中构建一个 native 镜像

native-image [options] -jar jarfile to build an image for a jar file.



2)正确设置 native 图像类路径并为 native 图像提供您想要的主要

You may provide additional options to the native image building: -cp and --class-path help to search for class files through separated list of directories, JAR archives, and ZIP archives;

native-image [options] class to build an executable file for a class in the current working directory. Invoking it executes the native-compiled code of that class.

关于java - 如何在 Eclipse 中使用 GraalVM (SubstrateVM) 将 Java 编译为 Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56726157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com