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

Mac OSX 10.11.6编译JNI代码报‘jni.h’未找到,求正确命令

问题解答

是的,你用的这个指南确实严重过时了——它针对的是Mac OS X 10.6(Snow Leopard)这种距今十几年的老旧系统,现在的macOS版本(比如Ventura、Sonoma,以及M系列芯片的设备)的Java头文件路径、JDK安装结构都已经完全改变了,所以找不到jni.h是必然的。

为什么旧命令失效?

旧命令里的两个路径:

  • /Developer/SDKs/MacOSX10.6.sdk:这个目录在现代macOS里早就被移除了,Apple已经不再默认预装开发者SDK到这个位置,而且10.6的SDK也完全不适用于当前系统。
  • /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Headers:现在Apple已经不再提供默认的系统级JDK,用户通常安装的是第三方JDK(比如Oracle JDK、Adoptium/Azul Zulu的OpenJDK),这些JDK的头文件都存放在自己的安装目录里,而非系统框架的旧路径中。

当前正确的编译命令

现在的核心是找到你当前使用的JDK的include目录,以下是两种通用方案:

方案1:利用JAVA_HOME环境变量(推荐)

如果你已经设置了JAVA_HOME(指向你的JDK安装目录),直接用这个命令:

g++ -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/darwin" -c HelloWorld.cpp

方案2:自动获取当前默认JDK路径

如果你没设置JAVA_HOME,可以用macOS自带的/usr/libexec/java_home命令自动获取默认JDK的路径,命令如下:

g++ -I"$(/usr/libexec/java_home)/include" -I"$(/usr/libexec/java_home)/include/darwin" -c HelloWorld.cpp

额外说明

  • 如果你使用的是M系列芯片(arm64架构)的Mac,需要编译x86_64架构的库来兼容某些Java程序,可以在命令中添加-arch x86_64参数:
    g++ -arch x86_64 -I"$(/usr/libexec/java_home)/include" -I"$(/usr/libexec/java_home)/include/darwin" -c HelloWorld.cpp
    
  • 编译完成后,生成.o文件后,还需要链接成动态库(.dylib),命令大概是:
    g++ -dynamiclib -o libHelloWorld.jnilib HelloWorld.o -framework JavaVM
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:17:04