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

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

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

将第三方so包按照cpu架构,复制进libs中:
在这里插入图片描述
运行程序,加载动态链接库时,如报如下错误:

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靓照如下:
在这里插入图片描述

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值