• Graalvm上手体验


    一、安装GraalVM

    官方文档:Getting Started with GraalVM

    GraalVM下载,GraalVM官方提供了社区版和企业版。直接下载社区版,可以选择基于java8或基于java11等不同环境的版本。由于我使用的java8,所以下载基于java8的版本。

    1.下载后解压,设置环境变量

    JAVA_HOME = C:devToolsgraalvm-ce-java8-21.1.0
    
    GRAALVM_HOME = C:devToolsgraalvm-ce-java8-21.1.0
    
    PATH中添加  %GRAALVM_HOME%in

    2.安装native-image 

    配置好环境变量后,{GRAALVM_HOME}/bin/gu就能直接访问了

    C:Userslp>gu install native-image
    Downloading: Component catalog from www.graalvm.org
    Processing Component: Native Image
    Downloading: Component native-image: Native Image  from github.com
    Installing new component: Native Image (org.graalvm.native-image, version 21.1.0)

    3.windows平台安装Microsoft Visual C++ (MSVC)

    如果在实践中出现以下错误,则是没有安装MSVC或者没有进行环境初始化。

    Error: Default native-compiler executable 'cl.exe' not found via environment variable PATH

    在windows平台上build本地GraalVM镜像,就需要安装Microsoft Visual C++ (MSVC)。MSVC的版本取决于GraalVM依赖的java版本。具体详情参考官方说明:Prerequisites for Using Native Image on Windows

    官方的解决方法如下:

    1)基于JDK8的GraalVM,需要MSVC 2010 SP1 version,并推荐的安装方法是使用Microsoft Windows SDK 7.1:直接从Window SDK 7.1 image from Microsoft下载GRMSDKX_EN_DVD.iso,然后F:SetupSDKSetup.exe直接挂起镜像。(这里不知道官方文档想表达什么意思,我直接安装后也不起作用。最后我直接安装Visual Studio 2017 Visual C++ Build Tools解决问题。)

    2)基于JDK11的GraalVM,需要MSVC 2017 15.5.5或之后版本。

    stackoverflow上也有该问题:cl.exe missing when building native app using GraalVM

    4.初始化环境

    直接执行命令初始化环境

    #VS2017
    call "C:Program Files (x86)Microsoft Visual Studio2017BuildToolsVCAuxiliaryBuildvcvars64.bat"
    
    #VS2019
    call "C:Program Files (x86)Microsoft Visual Studio2019CommunityVCAuxiliary Buildvcvars64.bat”

    或者手动点击命令提示符来初始化

    我直接使用命令来初始化,如下

    D:>call "C:Program Files (x86)Microsoft Visual Studio2017BuildToolsVCAuxiliaryBuildvcvars64.bat"
    **********************************************************************
    ** Visual Studio 2017 Developer Command Prompt v15.0
    ** Copyright (c) 2017 Microsoft Corporation
    **********************************************************************
    [vcvarsall.bat] Environment initialized for: 'x64'

    二、入门案例

    1.先编写一段Java代码

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

    手动编译

    D:>javac HelloWorld.java

    运行,输出“Hello World”,表明程序没有问题。

    D:>java HelloWorld
    Hello, World!

    2.编译

    D:>native-image HelloWorld
    [helloworld:11552]    classlist:   8,569.48 ms,  1.14 GB
    [helloworld:11552]        (cap):   3,427.01 ms,  1.14 GB
    [helloworld:11552]        setup:   7,834.29 ms,  1.62 GB
    [helloworld:11552]     (clinit):     182.21 ms,  1.62 GB
    [helloworld:11552]   (typeflow):   7,517.48 ms,  1.62 GB
    [helloworld:11552]    (objects):   4,503.86 ms,  1.62 GB
    [helloworld:11552]   (features):     279.05 ms,  1.62 GB
    [helloworld:11552]     analysis:  12,821.36 ms,  1.62 GB
    [helloworld:11552]     universe:     635.62 ms,  1.62 GB
    [helloworld:11552]      (parse):   2,408.88 ms,  1.65 GB
    [helloworld:11552]     (inline):   2,643.45 ms,  1.65 GB
    [helloworld:11552]    (compile):  14,668.37 ms,  1.87 GB
    [helloworld:11552]      compile:  20,715.77 ms,  1.87 GB
    [helloworld:11552]        image:   1,928.67 ms,  1.87 GB
    [helloworld:11552]        write:   3,047.36 ms,  1.87 GB
    # Printing build artifacts to: helloworld.build_artifacts.txt
    [helloworld:11552]      [total]:  56,019.11 ms,  1.87 GB 

    3.运行

    注意,生成的可执行文件名称大小写。

    D:>helloworld
    Hello, World!
    不积跬步,无以至千里。不积小流,无以成江海!
  • 相关阅读:
    cgic: CGI的C函数库
    linux下的webserver BOA及CGIC库的使用指南(转帖)
    UDP 收/发 广播包
    winsock 收发广播包
    Linux系统下UDP发送和接收广播消息小例子
    uboot里读sd卡内容
    uboot从SD卡烧写内核和文件系统
    intellij 创建一个文件自动就add到git了,这个怎么取消
    内部类和外部类之间的相互调用
    JDK8的新特性——Lambda表达式
  • 原文地址:https://www.cnblogs.com/rouqinglangzi/p/14627868.html
Copyright © 2020-2023  润新知