GraalVM 在 Linux 上的安装与 Native Image 工具链配置指南
2026/9/20 2:30:36 网站建设 项目流程

GraalVM 在 Linux 上的安装与 Native Image 工具链配置指南

【免费下载链接】graalGraalVM compiles applications into native executables that start instantly, scale fast, and use fewer compute resources 🚀项目地址: https://gitcode.com/gh_mirrors/gr/graal

本指南以 GraalVM 官方 Linux 安装文档(仓库内 docs/getting-started/linux.md)为核心骨架,系统讲解在 Linux(x64 与 AArch64)上安装 GraalVM 的三种主流方式——SDKMAN!、归档解压、脚本友好 URL——并深入剖析 Native Image 构建对本地 C 工具链的依赖与前置条件。读完本文,你将掌握完整的 GraalVM 安装、环境变量配置、安装验证方法,以及在不同 Linux 发行版上为 Native Image 准备编译工具链的实操方案。

支持的平台

GraalVM 为 Linux 提供x64AArch64两种架构的发行包,覆盖绝大多数主流服务器与开发者机器。你可以根据实际硬件选择对应架构的安装包,安装流程本身与架构无关,差异仅体现在下载包名中的架构标识(x64aarch64)。

方式一:使用 SDKMAN! 安装

SDKMAN! 是面向 Unix 系系统的 JDK 版本管理工具,它能帮助你安装并轻松地在多个 JDK 之间切换,是日常开发中最省心的 GraalVM 安装方式。

安装 Oracle GraalVM:

sdk install java <version>-graal

其中<version>是你要安装的 GraalVM 版本号(如23.0.2)。若要安装 GraalVM Community Edition,只需把发行版标识从graal改为graalce

sdk install java <version>-graalce

常用管理命令:

命令作用
sdk list java列出 SDKMAN! 当前可安装的全部 JDK 发行版,包括所有 GraalVM 版本
sdk use java <version>-graal仅为当前终端会话切换到指定 GraalVM 版本
sdk default java <version>-graal将指定版本设为所有新终端会话的默认 JDK

usedefault的区别在于作用域:前者只影响当前 shell 会话,适合临时验证;后者写入 SDKMAN! 的全局配置,适合长期使用。

方式二:从归档(.tar.gz)安装

归档安装适用于希望将 GraalVM 安装在任意自定义目录、且不影响机器上其他 JDK 的场景,无需 root 权限即可完成。

  1. 前往 GraalVM 官方 Downloads 页面,选择目标 Java 版本、操作系统Linux、架构x64aarch64,下载对应的.tar.gz压缩包。

  2. 切换到希望安装 GraalVM 的目录,将.tar.gz文件移动至该目录。

  3. 解压归档:

    tar -xzf graalvm-jdk-<version>_linux-<architecture>.tar.gz
  4. 机器上可能同时存在多个 JDK,需要配置运行时环境以指向新安装的 GraalVM:

    • JAVA_HOME环境变量设置为 GraalVM 安装目录:

      export JAVA_HOME=/path/to/<graalvm>
    • 将 GraalVM 的bin/目录加入PATH环境变量:

      export PATH=/path/to/<graalvm>/bin:$PATH

上述export仅对当前终端会话生效。若希望永久生效,可将这两行追加到~/.bashrc~/.zshrc等 shell 配置文件末尾。

安装完成后,运行java -version验证安装是否成功。如有需要,还可以在 IDE 中将 GraalVM 指定为默认 JRE/JDK 安装。

安装验证与首次运行

安装成功后,可以参照仓库内的 docs/getting-started/get-started.md 完成一次完整的"编译字节码 → 构建原生可执行文件"流程。GraalVM 自带完整的 JDK 与 Graal 编译器,java启动器以 Graal 作为最后一层(last-tier)编译器运行 JVM,因此任何现有 Java 应用都可以不加修改地直接运行:

public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
javac HelloWorld.java native-image HelloWorld ./helloworld

native-image命令会在当前目录生成名为helloworld的可执行文件,它以毫秒级启动速度运行HelloWorld类的原生编译代码。注意:这一步依赖本地 C 工具链,请确保系统满足下文"Native Image 的 Linux 前置条件"一节所列的依赖。

方式三:脚本友好 URL 下载

脚本友好 URL 允许你在命令行中直接下载 GraalVM,或将下载步骤自动集成到脚本和 Dockerfile 中。使用时将<version>替换为 JDK 版本号,将<architecture>替换为aarch64x64

# 使用 wget 下载 wget https://download.oracle.com/graalvm/<version>/latest/graalvm-jdk-<version>_linux-<architecture>_bin.tar.gz # 使用 curl 下载 curl https://download.oracle.com/graalvm/<version>/latest/graalvm-jdk-<version>_linux-<architecture>_bin.tar.gz # 从归档地址下载 curl https://download.oracle.com/java/<version>/archive/jdk-<version>_linux-<architecture>_bin.tar.gz

latest/路径始终指向该版本的最新发布,适合在 CI 流水线中保持自动更新;archive/路径则可用于固定拉取历史归档版本。更多安装选项请参考 GraalVM 官方 Downloads 页面。

容器场景下的安装路径约定

如果是在容器镜像(尤其是 Oracle Linux 系镜像)中使用 GraalVM,可以留意仓库内 docs/getting-started/container-images/oracle-graalvm-container-images.md 记录的路径约定:Oracle GraalVM 容器镜像将运行时安装在/usr/lib64/graalvm/graalvm-java<$FeatureVersion>/(例如 Oracle GraalVM 25.3 安装在/usr/lib64/graalvm/graalvm-java25i3/),且所有二进制(javajavacnative-image等)通过alternatives机制注册为全局命令,因此在容器内可以直接调用而无须手动设置PATH

Native Image 的 Linux 前置条件

native-image工具(位于 GraalVM 安装目录的bin/下)会将 Java 字节码提前编译(ahead-of-time)为平台相关的原生可执行文件,因此它依赖本地 C 工具链,包括 C 库的头文件(glibc-devel)、zlibgcc,以及部分发行版需要的libstdc++-static

最小版本要求

官方文档明确列出的构建最低版本要求如下:

依赖项最低版本说明
glibc2.17基础 C 运行库
zlib1.2.3压缩库
GNU Compiler Collection (GCC)10.3.0C 编译器
cmake3.22.2仅当从源码构建时需要

注意:版本低于 10.x 的 GCC 可能导致构建失败。如果编译失败,请优先检查本机 GCC 版本是否满足要求。

工具链检查的源码级原理

native-image在构建时会主动探测并验证本机 C 编译器,这一逻辑实现在 CCompilerInvoker.java 中。从源码可以看到,CCompilerInvoker.create()会根据宿主操作系统分发对应的编译调用器(Linux 对应LinuxCCompilerInvoker,macOS 对应DarwinCCompilerInvoker,Windows 对应WindowsCCompilerInvoker,见 CCompilerInvoker.java#L83-L95),并在verifyCompiler()中执行实际校验(CCompilerInvoker.java#L97-L105)。

当工具链检查失败时,错误信息会提示可以通过命令行选项关闭检查(见 CCompilerInvoker.java#L107-L112 中SubstrateOptions.CheckToolchain的用法),对应native-image-H:-CheckToolchain选项。可以推断:当你确信工具链配置正确、但检测环节误报时,可临时关闭该检查以继续构建;不过官方强烈建议保持检查开启,因为工具链缺失或版本过旧会直接导致链接阶段失败。

使用包管理器安装依赖

如果这些依赖尚未安装,可以按发行版使用对应的包管理器进行安装。

Oracle Linux(使用yum):

sudo yum install gcc glibc-devel zlib-devel

部分 Linux 发行版可能额外需要libstdc++-static。它要求对应的可选软件源处于启用状态:Oracle Linux 7 为ol7_optional_latest,Oracle Linux 8 为ol8_codeready_builder,Oracle Linux 9 为ol9_codeready_builder。启用后执行:

sudo yum install libstdc++-static

Ubuntu Linux(使用apt-get):

sudo apt-get install build-essential zlib1g-dev

build-essential元包会一并带入gccg++makelibc6-dev(即 glibc 头文件),一条命令即可满足大部分构建需求。

其他 Linux 发行版(使用dnf,如 Fedora、RHEL 8+):

sudo dnf install gcc glibc-devel zlib-devel libstdc++-static

安装完成后,可通过gcc --versionldd --version分别验证 GCC 与 glibc 的版本是否满足上表的最低要求。同一套前置条件与安装命令也完整记录在 docs/reference-manual/native-image/README.md 的 Prerequisites 章节中,可供交叉核对。

安装方式对比与选型建议

安装方式适用场景是否需要 root优点
SDKMAN!日常开发、多 JDK 频繁切换一条命令安装/切换/卸载,管理成本最低
归档解压自定义目录安装、离线环境、生产服务器完全可控,不污染系统其他 JDK
脚本友好 URLCI/CD 流水线、Dockerfile 自动化可脚本化,支持固定版本与 latest 跟随

后续学习路径

安装完成后,推荐按以下路径继续深入:

  • 初次接触 GraalVM 的读者,可先阅读 docs/getting-started/get-started.md 完成 HelloWorld 全流程,再阅读 docs/reference-manual/native-image/NativeImageBasics.md 理解 Native Image 技术原理;
  • 想了解 GraalVM 整体能力、发行版与特性概览,可阅读 docs/introduction.md;
  • 需要系统了解 Native Image 构建配置、第三方库集成与更进一步指南的读者,可进入 docs/reference-manual/reference-manuals.md 查阅各参考手册;
  • 以容器为部署目标的读者,可继续阅读 Oracle GraalVM 容器镜像文档 与 GraalVM CE 容器镜像文档,其中介绍了jdknative-image两类镜像仓库、muslib静态链接变体以及标签命名规范,可直接用于多阶段构建(multistage build)的 Dockerfile 编写。

【免费下载链接】graalGraalVM compiles applications into native executables that start instantly, scale fast, and use fewer compute resources 🚀项目地址: https://gitcode.com/gh_mirrors/gr/graal

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询