一些关于linux 下的jni下问题

编译的细节我就不写了,主要写一些linux下的注意事项,mask一下错误(太多windows的例子了)

编译教程:http://www.cnblogs.com/youxilua/archive/2011/09/16/2178554.html


注意事项:

1、编译.class文件,javaer都会的事情

用javah去编译xxxx.h文件这个是注意事项,javah 包名(例:com.ansion.jni).类 

例子:src$ javah com.ansion.jni.myjni  

然后你ls一下就会看见你的 myjni.h


2、在windows下是吧xxx.h编译成xxx.dll

在linux下比较复杂,先吧 xxx.h-->xxx.o--->xxx.so(我们用的就是so)

1)得到xxx.o指令

 gcc -fPIC  -D_REENTRANT -I  %JAVA_HOME%/include/  -I  %JAVA_HOME%/include/linux/ -c  jni.c 

指令例子

 gcc -fPIC  -D_REENTRANT -I  /home/ansionchen/workspace/java-7-sun/include/  -I /home/ansionchen/workspace/java-7-sun/include/linux/ -c  jni.c 

这样就得到 xxx.o


2)指令xxx.so指令

gcc -shared 要转的o文件 -o 目标so的path名字

指令例子:

gcc -shared jni.o -o libjni.so


3、得到一个so文件你现在发现会出现这样的错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: no ji in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1878)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1087)
at com.ansion.jni.jni.<clinit>(jni.java:15)


然后网上很多说修改什么LD_LIBRARY_PATH,java -d什么path的,感觉都没有用,加上做项目的话每次改path都会造成不少影响,如果开机启动那就更加麻烦了


但是细心的人就会发现eclipse可以设置

见下图



原文地址:https://www.cnblogs.com/riskyer/p/3271483.html