java jni ubuntu 环境搭建时遇到的坑

1:版本不一致遇到的坑

javah的版本需要同javac的版本一致。如果版本的问题搞不定,直接用andorid  source build之后的环境即可

2:javah使用遇到的坑

jni中字段描述符可以使用javah生成

javah -jni -classpath . JNIdemo

其中 -classpath . 表示从当前目录搜索class 如果不添加会爆出来各种不太相关的错误

3:执行class时遇到的坑

如果执行class时候,需要调用 so

仅仅直接执行 java JNIdemo会报错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: no native in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1124)
    at JNIDemo.<clinit>(JNIDemo.java:4)

这时需要 exprort lD_LIBRARY_PATH=.   等号两边不要有空格。用来配置so的寻找路径

4.java 静态map c

直接使用javah来生成.h文件。在c中inlcude 该 .h即可。

当然也可以将java.h 去掉。把inlude 的内容都放到c文件中

如果大型工程中无法单独compile,可以将需要map的函数单独拿出来创建一个java文件。

5:编译so文件的指令

gcc -I (jni.h的路径)  -I(jvm.h的路径) -fPIC -shared -o libnative.so native.c

eg:

 gcc -I /home/austinxin/work/SM8150-Android/android/prebuilts/jdk/jdk9/linux-x86/include -I /home/austinxin/work/SM8150-Android/android/prebuilts/jdk/jdk9/linux-x86/include/linux/ -shared -o libnative.so JNIDemo.c

eg:

gcc -I /usr/lib/jvm/java-1.11.0-openjdk-amd64/include/ -I /usr/lib/jvm/java-11-openjdk-am64/include/include/ -fPIC -shared -o libnative.so native.c

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值