您的位置:首页 > 运维架构 > Linux

一些关于linux 下的jni下问题

2013-08-20 17:51 176 查看
编译的细节我就不写了,主要写一些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 %J***A_HOME%/include/ -I %J***A_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可以设置

见下图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: