java jni ubuntu 环境搭建时遇到的坑
1:版本不一致遇到的坑
javah的版本需要同javac的版本一致。如果版本的問題搞不定,直接用andorid? source build之后的環(huán)境即可
2:javah使用遇到的坑
jni中字段描述符可以使用javah生成
javah -jni -classpath . JNIdemo
其中 -classpath . 表示從當前目錄搜索class 如果不添加會爆出來各種不太相關的錯誤
3:執(zhí)行class時遇到的坑
如果執(zhí)行class時候,需要調用 so
僅僅直接執(zhí)行 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 靜態(tài)map c
直接使用javah來生成.h文件。在c中inlcude 該 .h即可。
當然也可以將java.h 去掉。把inlude 的內容都放到c文件中
如果大型工程中無法單獨compile,可以將需要map的函數(shù)單獨拿出來創(chuàng)建一個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
?
?
總結
以上是生活随笔為你收集整理的java jni ubuntu 环境搭建时遇到的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用PowerShell提升开发效率
- 下一篇: ubuntu7.10安装到3D开启