文件:
HelloJNI.java
HelloJNI.class
HelloJNI.h
HelloJNI.c
HelloJNI.o
hellojni.so
步骤:
1.编写Java代码 HelloJNI.java
2.编译java代码 javac HelloJNI.java --> HelloJNI.class
3.生成头文件 javah HelloJNI --> HelloJNI.h
4.编写头文件对应的实现c文件
a.编译HelloJNI.c ---> HelloJNI.o
gcc -fPIC -c HelloJNI.c -I /usr/lib/jvm/java-8-openjdk-arm64/include -I /usr/lib/jvm/java-8-openjdk-arm64/include/linux
b.o变成so
gcc -shared HelloJNI.o -o hellojni.so
5.执行java文件
java HelloJNI
前提:
加载库有两个函数,一个是System.loadLibrary, 一个是system.load
---------------------------
这里碰到一个问题:
就是用static { System.loadLirary("hellojni"); },
执行java,当前文件夹下的so找不到, 运行报错,
老是说 Exception in the Thread "main" java.lang.UnsatisfiedLinkError: no hellojni in java.library.path
问题的尝试与解决:
1.我这里按网上的方法,export LD_LIBRARY_PATH=/home/qyichao/test:$LD_LIBRARY_PATH
还是不行!!!
2. 先是System.out.println("path: " + System.getProperty("java.library.path")); 把路径打出来
3.把hellojni.so赋值到上面的一个路径,/usr/lib/中,再次运行java HelloJNI还是报这个错,找不到so
。。。。。。。。。。。。。。。。
4.看了好多博客,还是没解决,很奇怪,so明明复制到PATH,还是找不到。
---------
然后就没用System.loadLirary, 用system.load("so绝对路径"),就可以了。