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

使用JNI集成C代码到Java项目时编译DLL遇stdio.h缺失错误

解决JNI编译时jni.h找不到stdio.h的问题

嘿,我碰到过一模一样的问题,这就帮你搞定!

首先得搞清楚:你自己代码里删掉stdio.h引用没用的,因为**jni.h本身就依赖stdio.h**——打开JDK里的jni.h看看,开头就有#include <stdio.h>,所以错误的根源不是你的代码,是编译环境没把Visual Studio的标准库头文件路径加进去。

下面是具体的解决步骤:

  • 先确保正确加载VS的编译环境:
    别直接双击vcvars32.bat,那样它运行完就退出了,环境变量没保留。你得打开VS2017的开发者命令提示符(x86),这个工具会自动帮你加载好所有VS的编译环境变量,包括标准库的头文件、库文件路径。如果找不到这个提示符,也可以手动打开cmd,然后运行完整路径的vcvars32.bat,比如:

    "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat"
    

    (路径根据你VS的版本和安装位置调整,比如你装的是Professional版,就把Community换成Professional)

  • 检查编译命令的完整性:
    你的cl命令只加了JDK的include路径,还得加上JDK的win32子目录(因为jni_md.h在这里),另外要加上生成动态链接库的参数。比如你的C文件是MyNative.c,完整命令应该是这样:

    cl -I"C:\Program Files\Java\jdk1.8.0_151\include" -I"C:\Program Files\Java\jdk1.8.0_151\include\win32" -LD MyNative.c -FeMyNative.dll
    

    这里-LD是告诉编译器生成动态链接库,-Fe用来指定输出的dll文件名。

  • 注意32位/64位的匹配:
    如果你的JDK是64位的,那别用vcvars32.bat,改用vcvars64.bat,否则会出现环境不匹配的问题,导致路径找不到。

按照上面的步骤来,应该就能解决stdio.h找不到的问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:40:35