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

Mac+Java11环境编译quickjs-wrapper提示'jni.h'文件未找到

解决Mac+Java11下编译quickjs-wrapper时'jni.h'未找到的问题

问题背景

在Mac系统、Java 11环境下,尝试使用quickjs-wrapper在Java中集成quickjs(因Nashorn已弃用未选择它),执行编译命令:

cmake --build ./build/cmake --target quickjs-java-wrapper -j 6

时报错提示'jni.h' file not found。已配置JAVA_HOME,且确认jni.h存在于$JAVA_HOME/include目录,但问题仍未解决。

环境变量配置:

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Users/selvakumar/apache-maven-3.5.2/bin:/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home/bin:/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home/include

完整错误信息:

apples-MacBook-Pro:wrapper-java selvakumar$ cmake --build ./build/cmake --target quickjs-java-wrapper -j 6
[1/3] Building CXX object CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_context_jni.cpp.o
FAILED: CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_context_jni.cpp.o 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DCONFIG_BIGNUM -DCONFIG_VERSION="2021-03-27" -Dquickjs_java_wrapper_EXPORTS -I/include -I/include/darwin -g -std=gnu++11 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -fPIC -MD -MT CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_context_jni.cpp.o -MF CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_context_jni.cpp.o.d -o CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_context_jni.cpp.o -c /Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_context_jni.cpp
/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_context_jni.cpp:1:10: fatal error: 'jni.h' file not found
#include <jni.h>
         ^~~~~~~
1 error generated.
[2/3] Building CXX object CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_wrapper.cpp.o
FAILED: CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_wrapper.cpp.o 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DCONFIG_BIGNUM -DCONFIG_VERSION="2021-03-27" -Dquickjs_java_wrapper_EXPORTS -I/include -I/include/darwin -g -std=gnu++11 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -fPIC -MD -MT CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_wrapper.cpp.o -MF CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_wrapper.cpp.o.d -o CMakeFiles/quickjs-java-wrapper.dir/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_wrapper.cpp.o -c /Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_wrapper.cpp
In file included from /Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_wrapper.cpp:4:
/Users/selvakumar/newworkspace/quickjs-wrapper/native/cpp/quickjs_wrapper.h:15:10: fatal error: 'jni.h' file not found
#include <jni.h>
         ^~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.

问题分析

从错误日志的编译参数可见,编译器的头文件搜索路径是-I/include -I/include/darwin,这是相对路径而非$JAVA_HOME/include的绝对路径,说明CMake未正确读取JAVA_HOME环境变量,或是项目CMake配置未正确引用JAVA_HOME设置头文件路径。

解决步骤

1. 确保JAVA_HOME环境变量生效

在终端执行以下命令验证JAVA_HOME是否能被正确读取:

echo $JAVA_HOME

若输出为空或路径错误,需重新配置环境变量:

  • zsh用户编辑~/.zshrc,添加:
    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home
    export PATH=$JAVA_HOME/bin:$PATH
    
  • bash用户编辑~/.bash_profile或~/.bashrc,添加相同内容。

执行source ~/.zshrc(对应自己的配置文件)使配置生效,再次验证JAVA_HOME。

2. 重新运行CMake配置

旧的CMake缓存可能导致新环境变量未被读取,需删除缓存后重新配置:

# 删除旧build目录
rm -rf ./build/cmake
# 创建新build目录并进入
mkdir -p ./build/cmake && cd ./build/cmake
# 指定JAVA_HOME执行CMake配置
cmake -DJAVA_HOME=$JAVA_HOME ../../
# 重新编译
cmake --build . --target quickjs-java-wrapper -j 6

3. 手动修改CMake配置(若上述步骤无效)

若CMake仍未正确设置头文件路径,可修改项目的CMakeLists.txt(通常在native/cpp目录下),添加JDK头文件路径:

# 找到头文件包含部分,添加以下内容
include_directories(
    $ENV{JAVA_HOME}/include
    $ENV{JAVA_HOME}/include/darwin
)

保存后,重新执行步骤2的CMake配置和编译命令。

4. 临时方案:编译时手动指定头文件路径

若不想修改CMake配置,可在编译时直接添加头文件搜索路径:

cmake --build ./build/cmake --target quickjs-java-wrapper -j 6 -- -I$JAVA_HOME/include -I$JAVA_HOME/include/darwin

内容的提问来源于stack exchange,提问作者Selvakumar Ponnusamy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:07:06