新款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/darwinCMakeLists.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
相关产品推荐
相关产品推荐

