You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新款Mac Mini上CMake无法定位JNI包的技术求助

问题:新款Mac Mini上CMake无法找到JNI包

在新款ARM64架构的Mac Mini上运行CMake时,无法定位JNI包,但相同的CMake配置在旧款MacBook Pro、Windows及多种Linux系统上均可正常工作。已尝试设置CMAKE_FIND_FRAMEWORK=never,但无任何效果。

环境信息

  • CMake版本:3.26.3
  • Java版本:
java version "20.0.1" 2023-04-18
Java(TM) SE Runtime Environment (build 20.0.1+9-29)
Java HotSpot(TM) 64-Bit Server VM (build 20.0.1+9-29, mixed mode, sharing)
  • 系统版本:
Darwin  22.4.0 Darwin Kernel Version 22.4.0: Mon Mar  6 21:01:02 PST 2023; 
root:xnu-8796.101.5~3/RELEASE_ARM64_T8112 arm64
  • JAVA_HOME:/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home
  • JNI头文件存在验证:
ls -l /Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/include/jni.h
-rw-r--r--  1 root  wheel  74986 Mar  7 09:13 /Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/include/jni.h

CMake调试日志

CMake Debug Log at /Applications/CMake.app/Contents/share/cmake-3.26/Modules/FindJNI.cmake:434 (find_path):
  find_path called with the following settings:

    VAR: JAVA_INCLUDE_PATH
    NAMES: "jni.h"
    Documentation: JNI include directory
    Framework
      Only Search Frameworks: 1
      Search Frameworks Last: 0
      Search Frameworks First: 0
    AppBundle
      Only Search AppBundle: 0
      Search AppBundle Last: 0
      Search AppBundle First: 1
    CMAKE_FIND_USE_CMAKE_PATH: 1
    CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: 1
    CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: 1
    CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: 1
    CMAKE_FIND_USE_INSTALL_PREFIX: 1

  find_path considered the following locations:

  The item was not found.

可行解决思路

  • 手动指定JNI路径:在CMake命令行或CMakeLists.txt中直接设置JNI相关路径,绕过自动查找逻辑:
    命令行方式:

    cmake .. -DJAVA_INCLUDE_PATH=/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/include -DJAVA_INCLUDE_PATH2=/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/include/darwin
    

    CMakeLists.txt方式(添加在find_package(JNI)之前):

    set(JAVA_INCLUDE_PATH "/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/include")
    set(JAVA_INCLUDE_PATH2 "/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/include/darwin")
    
  • 升级CMake版本:CMake 3.26可能对ARM64 macOS的JNI路径识别存在兼容性问题,尝试升级到3.27及以上版本,新版本可能修复了ARM架构下的查找逻辑。

  • 确保环境变量正确传递:运行CMake前显式导出JAVA_HOME,避免CMake无法读取该变量:

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home
    cmake ..
    

内容的提问来源于stack exchange,提问作者Jim Starkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:28:13