使用 GraalVM 构建本机应用程序时缺少 cl.exe

tmm*_*mls 11 cl.exe graalvm graalvm-native-image

我正在尝试使用 GraalVM 和本机图像构建本机应用程序。开始构建过程时发生错误。类路径中似乎缺少 cl.exe。就像 GraalVM 网站上提到的那样,我已经安装了“GRMSDKX_EN_DVD.iso”(适用于 Windows 7 和 .NET 的 Windows SDK)。我也试过为 Windows 10 安装 Windows SDK。

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>native-image -jar C:\Users\tm\Desktop\DemoGraalVM\target\Demo-1.0-SNAPSHOT.jar
[Demo-1.0-SNAPSHOT:28776]    classlist:   2,435.83 ms,  1.16 GB
[Demo-1.0-SNAPSHOT:28776]        setup:     646.59 ms,  1.16 GB
Error: Default native-compiler executable 'cl.exe' not found via environment variable PATH
Error: To prevent native-toolchain checking provide command-line option -H:-CheckToolchain
Error: Use -H:+ReportExceptionStackTraces to print stacktrace of underlying exception
Error: Image build request failed with exit status 1
Run Code Online (Sandbox Code Playgroud)

我正在使用 Windows 10,graalvm-ce-java8-windows-amd64-20.2.0。我也在运行 Visual Studio Community Edition 并使用 Visual Studio 2019 Developer Command Prompt v16.3.1。Java 应用程序是使用 Maven 在 IntelliJ Community Edition 中构建的。

我怎样才能解决这个问题?我在哪里下载 cl.exe 或哪个安装包包含此文件?

Zac*_*ach 14

很抱歉你遇到了麻烦;希望我们能很快把它扼杀在萌芽状态!
看起来您缺少一些依赖项,因此我会尽力为您解决问题。


要在 Windows 上构建本机 GraalVM 映像,您需要Microsoft Visual C++ (MSVC)。所需的版本取决于您的 GraalVM 发行版所基于的 JDK 版本。

  • 对于使用 Java 8 的 GraalVM 发行版,您需要MSVC 2010 SP1

    推荐的安装方法是使用 Microsoft Windows SDK 7.1:

    1. GRMSDKX_EN_DVD.iso从 Microsoft下载 SDK 文件。
    2. F:\Setup\SDKSetup.exe直接打开挂载镜像。

    根据 GraalVM 本机图像参考,您可以通过MicrosoftWindow SDK 7.1 图像轻松获得

  • 对于使用 Java 11 的 GraalVM 发行版,您需要MSVC 2017 15.5.5 或更高版本
    绝对建议您使用最新版本(目前为 2019 年),除非您已经在工作流程中使用了另一个版本。你可以在这里得到它。


安装 Visual Studio 后,所有构建命令都应通过本机工具命令提示符运行。
如果您在安装 Visual Studio 时保留默认的“开始”菜单快捷方式,则可通过以下网址访问:
Start -> Visual Studio 2019 -> Tools -> x64 Native Tools Command Prompt


鉴于您的代码是有序的,使用正确的工具链将解决您的问题。如果出现任何其他问题,我鼓励您为他们发布另一个问题;祝你的项目好运!


小智 10

(感谢 @Gnosis00 和 @Zach 的解决方案。它几乎对我有用。这是一个改进的版本,使得在 IDEA IntelliJ 中也可以进行本机构建。)

使用文本编辑器修改native-image.cmd(在您的%JAVA_HOME%\bin目录中),使其开头为

@echo off

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" > nul
Run Code Online (Sandbox Code Playgroud)

每次native-build调用时都会自动添加所需的构建工具链。您不必再从 Visual Studio 的本机工具命令提示符启动它。

请注意结尾> nul以抑制 的任何输出vcvars64.bat。否则,Spring Boot 的 Gradle 构建脚本对 GraalVM 的版本检测将会失败。

此解决方案已使用Microsoft Visual Studio 2022 CEIDEA IntelliJ 2022.1.3graalvm-ce-java17-windows-amd64-22.3.1进行测试。


小智 8

快速指南

  1. 安装Visual Studio(必须选择Microsoft Visual C++)
  2. 下载 GraalVM 并解压。
  3. 将 env 设置GRAALVM_HOME为 graalvm 所在的位置。
  4. 编辑%GRAALVM_HOME%\bin\native-image.cmd
  5. 将以下行添加到最顶部

调用“C:\ Program Files(x86)\ Microsoft Visual Studio \ 2019 \ Community \ VC \ Auxiliary \ Build \ vcvarsx86_amd64.bat”

注意:vcvarsx86_amd64.bat根据您的 VS 版本,位置可能会有所不同。


tmm*_*mls 3

经过 2 年的努力,我放弃了使用 GraalVM 构建本机可执行文件的尝试。我现在使用 jPackage 命令行工具。它默认附带最新版本的 Java。奇迹般有效。没有麻烦,没有额外的依赖,没有错误,免费,...

更多信息: https: //youtu.be/ZGW9AalZLN4