国外psd网页模板网站,十大装饰公司,网站 编码文档,成都创意网站设计1#xff1a;版本不一致遇到的坑
javah的版本需要同javac的版本一致。如果版本的问题搞不定#xff0c;直接用andorid source build之后的环境即可
2#xff1a;javah使用遇到的坑
jni中字段描述符可以使用javah生成
javah -jni -classpath . JNIdemo
其中 -classpath…1版本不一致遇到的坑
javah的版本需要同javac的版本一致。如果版本的问题搞不定直接用andorid source build之后的环境即可
2javah使用遇到的坑
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