美文网首页
java.lang.UnsatisfiedLinkError:

java.lang.UnsatisfiedLinkError:

作者: miniminiming | 来源:发表于2018-04-24 18:03 被阅读0次

    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的时候常常出现

    1. 包名不对,jni方法必须要对应包名
    2. 打包(包内有多个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类。

    相关文章

      网友评论

          本文标题:java.lang.UnsatisfiedLinkError:

          本文链接:https://www.haomeiwen.com/subject/qqcjlftx.html