使用GCC编译JNI库时提示jni.h文件找不到的问题求助
解决GCC编译JNI库时"jni.h: No such file or directory"错误
以下是针对你遇到问题的具体解决方案:
1. 修正GCC包含路径参数
Windows平台下的GCC(如MinGW)使用-I作为包含路径参数,而非MSVC的/I。同时Windows命令行中环境变量引用要用%变量名%,而非Linux的${}或$()语法。
正确的编译命令示例:
# 直接指定JDK路径 gcc -I"D:\JDK 8\include" -I"D:\JDK 8\include\win32" -o lib.dll -shared NativeClass.cpp # 使用JAVA_HOME环境变量 gcc -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -o lib.dll -shared NativeClass.cpp
2. 修正JNI库的输出后缀
.jnilib是macOS平台的JNI库后缀,Windows平台的JNI库后缀应为.dll。同时要和Java代码中的loadLibrary参数对应:你的Java代码中调用System.loadLibrary("lib");,所以输出文件需命名为lib.dll。
3. 修复C++代码中的头文件错误
你的NativeClass.cpp存在两处头文件引用错误,会导致后续编译失败:
- 将
<stream>改为<iostream>(C++标准输入输出流的正确头文件) - 将
<math>改为<cmath>(C++标准数学库的正确头文件)
修正后的NativeClass.cpp代码:
#include "NativeClass.h" #include <iostream> #include <cmath> #include <string> #include <jni.h> using namespace std; JNIEXPORT void JNICALL Java_NativeClass_addOtherMethod (JNIEnv *, jclass, jstring st1, jstring st2) { // some code }
4. 验证GCC环境与文件权限
- 打开新的命令行窗口,执行
gcc --version,确认GCC能正常调用(需将GCC路径加入系统PATH)。 - 确认
D:\JDK 8\include\jni.h和D:\JDK 8\include\win32\jni_md.h文件存在,且当前用户对该路径有读取权限。
内容的提问来源于stack exchange,提问作者AskAnyQuestion
相关产品推荐
相关产品推荐

