java.lang.UnsatisfiedLinkError:
2018-04-24 本文已影响0人
miniminiming
java.lang.UnsatisfiedLinkError: No implementation found for void ming.com.assimptest.MyGLRenderer.SurfaceCreatedNative() (tried Java_ming_com_assimptest_MyGLRenderer_SurfaceCreatedNative and Java_ming_com_assimptest_MyGLRenderer_SurfaceCreatedNative__)
这个异常在编写jni的时候常常出现
- 包名不对,jni方法必须要对应包名
- 打包(包内有多个cpp文件)时类型不对,应该选用SHARE,而不是STATIC
#引入cpp文件,第一个变量是路径,第二个是变量名,会把这个路径下的所有文件打包成库,注意这里用SHARE
aux_source_directory(${CURRENT_DIR}/src/main/cpp/jniCalls ModelAssimp)
add_library(ModelAssimpNative SHARED ${ModelAssimp})
3.文件夹不对
正常情况下是四个文件夹(我这里依赖了一个aar,aar里有四个lib的文件夹),但是你可能用CmakeLists.txt只编译了一个文件夹,那么其他架构中最后就没有Cmake编译出来的so,就会报错,用ndk filterAbi过滤一下
4.System.loadLibrary调用的位置不对
我原以为在哪儿都行,就写到一个Activity(从未调用)中,但是死活报这个错,于是放入一个调用过的类中,就好了。
5.总以为自己包名写对了,但是其实并没有写对,比如包名是moudle,但是在Jni文件中却是module。如下图,如果真正对应上的话,左边会有红绿的小箭头,否则是没有的
image.png
6.混淆,避免混淆掉so内部调用的Java类。