1安装前准备
1jdk安装,gcc安装
jdk:请百度,
gcc:yum -y install gcc gcc-c++ kernel-devel
1.2 编写java文件,用native申明要用c实现的函数,如果是在window写的,用ftp传到Linux,然后把文件放在合适的位置(如果源程序是包含在package里的话,应该建立同样的文件夹结构,我这里是/home/test/bbaa)
package bbaa;
public class YuServer {
static {
System.load("/home/test/bbaa/yuluoNet.so");
}
public static void main(String[] args) {
conn();
}
public static native void conn();
}
注意网上的教程是:
System.loadLibrary("yuluoNet");
这里有些问题,可能是我用yum安装jdk导致的,后面加载库的时候,设置了路径但是无效,会报一个错,.so文件没有在库文件路径上。
1.3在YuServer.java文件所在目录下编译.java文件
javac YuServer.java
1.4 在/test调用Javah生成.h文件,注意网上的教程有些问题,不知道是我电脑的问题还是什么,网上的是javah 包名+类名,按照这样,电脑报错,找不到类文件,或者是没有一个准确的类名字,下面是我自己摸索出来的,
javah -classpath /home/test bbaa.YuServer
1.5编写.c文件,实现引用第4步中生成的.h头文件,并实现其中声明的方法,
h文件:
c文件:
把.h文件引入,然后实现.h文件里的方法,这里的红线只是我用windows的vscode打开,它找不到文件,
1.6 将第5步中编写的.c文件,编译成.so文件`
gcc -fPIC -I /usr/lib/jvm/java-1.8.0-openjdk/include -I /usr/lib/jvm/java-1.8.0-openjdk/include/linux -shared -o yuluoNet.so server.c
这里的 /usr/lib/jvm/java-1.8.0-openjdk/include -I /usr/lib/jvm/java-1.8.0-openjdk/include/linux 是为了引入第4步第一张图里的jni.h和jni_md.h文件,你可以cd到那里,如果没有,你就去你jdk的安装位置下去找。
1.7 将第6步中生成的.so文件拷贝到java的加载库LD_LIBRARY_PATH指向的路径中,这里就是我第二步所说的问题,由于不排除是我的电脑问题,所以还是记录,在root下,执行命令:
export LD_LIBRARY_PATH=/home/test/bbaa
这里的路径就是你的.so文件所在的路径
运行
在/test下,一切正常的话,程序会按照你编写的代码运行。
java bbaa.YuServer