- 适用于 JDK 23 的 GraalVM(最新)
- 适用于 JDK 24 的 GraalVM(抢先体验)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 归档
- 开发构建
GraalVM LLVM 运行时
GraalVM LLVM 运行时可以执行可以转换为 LLVM 位码的编程语言。这包括 C/C++、Fortran 等语言。
与通常用于基于 LLVM 的语言的静态编译不同,GraalVM 对 lli
工具的实现首先解释 LLVM 位码,然后使用 Graal 编译器动态编译程序的热点部分。这允许与 GraalVM 支持的动态语言无缝互操作。
入门 #
GraalVM LLVM 运行时可以作为独立分发版使用。您可以下载基于 Oracle GraalVM 或 GraalVM 社区版的独立版本。
-
下载适用于您操作系统的 LLVM 24.0 独立版本
-
解压缩存档
注意:如果您使用的是 macOS Catalina 及更高版本,您可能需要删除隔离属性
sudo xattr -r -d com.apple.quarantine <archive>.tar.gz
提取
tar -xzf <archive>.tar.gz
-
独立版本除了其原生启动器外还包含 JVM。检查版本以查看 GraalVM LLVM 运行时是否处于活动状态
./path/to/bin/lli --version
现在您可以执行 LLVM 位码格式的程序了。
LLVM 工具链 #
此外,预构建的 LLVM 工具链与 GraalVM LLVM 运行时捆绑在一起。
- 使用
lli
的--print-toolchain-path
参数获取工具链的位置./path/to/bin/lli --print-toolchain-path
- 设置
LLVM_TOOLCHAIN
环境变量export LLVM_TOOLCHAIN=$(./path/to/bin/lli --print-toolchain-path)
- 然后查看工具链路径的内容以获取可用工具的列表
ls $LLVM_TOOLCHAIN
现在您可以使用来自 GraalVM LLVM 工具链的 clang
将 C/C++ 代码编译为 LLVM 位码。
运行 LLVM 位码 #
要在 GraalVM LLVM 运行时上运行基于 LLVM 的语言,二进制文件需要使用嵌入式位码进行编译。这 编译 指南提供了有关如何将程序编译为 LLVM 位码以及预期文件格式的信息。
执行 LLVM 位码格式程序的语法是
lli [LLI options] [GraalVM options] [polyglot options] <bitcode file> [program args]
这里,<bitcode file>
是 包含嵌入式 LLVM 位码的已编译程序。查看 LLI 命令选项 或使用 lli --help
获取选项说明。
例如,将此 C 代码放入名为 hello.c
的文件中
#include <stdio.h>
int main() {
printf("Hello from GraalVM!\n");
return 0;
}
然后将 hello.c
编译为包含嵌入式 LLVM 位码的可执行文件 hello
,并按如下方式运行它
$LLVM_TOOLCHAIN/clang hello.c -o hello
lli hello
注意:LLVM 位码是平台相关的。程序必须编译为适合相应平台的位码。