一、操作步骤简述
- 搭建java环境、GCC环境
- 编写Java文件
- 生成JNI头文件
- 编写C文件并把C库编译成dll(或so)文件
- 运行
二、遇到的错误汇总
2.1 javah一直不成功
先在底部的端口跳转到src目录,然后执行以下代码,搞定
javah -d ./jni org.minilzo.common.MiniLzoJNI
//-d 是创建文件夹
2.2 生成dll文件报错 error: parameter name omitted
gcc -Wl,--add-stdcall-alias -I"C:\Program Files\Java\jdk1.8.0_191\include" -I"C:\Program Files\Java\jdk1.8.0_191\include\win32" -shared -o ./dll/MiniLzoJNI64.dll ./jni/MiniLzoJNI.c
报错error: parameter name omitted,是因为直接复制了头文件的函数,没添加参数,后来代码改了下,搞定
//.h文件中定义
JNIEXPORT void JNICALL Java_org_minilzo_common_MiniLzoJNI_sayHello
(JNIEnv *, jobject);
//.c文件中实现
JNIEXPORT void JNICALL Java_org_minilzo_common_MiniLzoJNI_sayHello(JNIEnv *env, jobject thisObj)
{
printf("Hello World!\n");
return;
}
参考资料:
IntelliJ IDEA平台下JNI编程(一)—HelloWorld篇