写在前面:
参考了:https://blog.csdn.net/huachao1001/article/details/53906237
但是这篇文章有很多问题,配置gcc可以参考上面。
链接: https://pan.baidu.com/s/1slpQrrJ
密码: fykw
下载解压后,配置环境变量。
创建项目:
IDEA社区版。
什么都别选。
打钩,确认。
java文件生成jni:
新建java文件:(库名提前想好)
这块跟android的jni一样,terminal命令生成.h文件:
javah -jni -classpath (搜寻类目录) -d (输出目录) (类名)
注意,必须运行一下项目生成class文件。(截图中out文件夹)
这里需要注意一下:-classpath后面跟的目录是out的;并且到项目根目录停止。
javah -jni -classpath D:\IdeaProjects\2\out\production\2 -d D:\IdeaProjects\2\jni com.company.HelloJNI
运行后生成:.h文件
新建一个名字相同的.c,在这个例子里就是HelloJNI.c。.h文件名字不要改。
这里是C基础了,不赘述。
打dll、lib包:
gcc -shared -I "D:\Java\jdk1.8.0_201\include"-I "D:\Java\jdk1.8.0_201\include\win32" -o hello.dll HelloJNI.c
需要加入链接库-I,一个是jdk的include,一个是include下的win32。
主要是为了jni.h加入的,gcc的具体命令可以百度下哦。
gcc是“写在前面”里提前准备好的。C用gcc,C++用g++。
dll文件看不到的话,文件夹闭开一下:
C++用g++去编译,如果报错找不到:xxx.cpp: No such file or directory
记得把cpp文件路径写对,或者cd到jni里面。
dll引入:
这个时候运行HelloJNI.java文件,还是会报错:
idea no hello in java.library.path
dll没有自动引入,需要手动加进去,这点真不如android studio:
File -> Project Structure -> Library -> + -> 选中项目中的dll文件 -> OK
最终是下图这样子:
再运行一下:
OK啦。
写在最后:
1.参考资料可以看看,但是细节太差,错误很多。
百度上面很多复制粘贴也是不行,请教了c++工程师,他帮我写的gcc编译的。
gcc -Wl,--..... 这个编辑器直接报语法错误。
2.静态包就是gcc指令改成-static,文件名改成hello.lib。
3.网络上铺天盖地的HelloJNI编译jni,但是都没有提到多文件怎么打包,我也正在摸索。公司项目都是层层嵌套,引入第三方库的文件。