集成第三so之dlopen failed: library "libc++_shared.so" not found

集成第三方so时,build.gradle中需要有如下配置,否则so包不能打进APK中:

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
}

将第三方so包按照cpu架构,复制进libs中:
集成第三so之dlopen failed: library
运行程序,加载动态链接库时,如报如下错误:

dlopen failed: library "libc++_shared.so" not found

如下链接错误分析得当,但是并不能解决问题
NDK 学习之遇到的问题总结
如果项目是使用CMake插件构建的NDK,则在模块的build.gradle,defaultConf中添加如下代码,则与上面链接中所提到的解决办法等效.

 externalNativeBuild {
            cmake {
                arguments "-DANDROID_STL=c++_shared"
            }
  }

不能解决的原因是:添加的构建参数,是影响动态链接库编译过程的,而引入第三方so包,是已经编译完成的.
解决办法:
既然对应的 so 包依赖的 libc++_shared.so 没有找到,那么在自己的模块中触发一下ndk编译过程,编译出libc++_shared.so,这样问题就解决了.
自己的c/c++代码不用任何业务逻辑,其目的只是触发ndk构建,取HelloJnidemo中代码即可.
build.gradle中android节点添加:

 externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }

build.gradle中config节点添加:

 externalNativeBuild {
            cmake {
                arguments "-DANDROID_STL=c++_shared"
            }
  }

将HelloJni中CMakeLists.txt和hello-jni.c复制到src/main/cpp目录中.
构建项目,触发ndk构建过程,再次加载第三方so库即可.
构建后生成的libc++_shared.so靓照如下:
集成第三so之dlopen failed: library

你可能感兴趣的:(成长)