libc++ not find

场景

当我们将android系统编译出来的so库集成到APP的native代码中会遇到一个问题libc++.so not find

分析

1、libc++.so android系统没有对外公开也就是public.txt没有包含
2、APP使用NDK使用的不是libc++

先看配置方法
1、ndk 编译在build.gradle里面配置由宏控ANDROID_STL配置
externalNativeBuild {
cmake {
abiFilters “armeabi-v7a”,“arm64-v8a”
arguments ‘-DANDROID_TOOLCHAIN=clang’, ‘-DANDROID_STL=c++_static’
}
}
或者’-DANDROID_STL=c++_shared’
编译出来的so叫libc++_shared.so

在android系统中通过LOCAL_NDK_STL_VARIANT := c++_static 指定
LOCAL_NDK_STL_VARIANT := c++_shared 指定
编译链接的库叫libc++.so

android系统在public.txt对外暴漏的so叫libstdc++.so

//两者是不同的so,不能兼容

libc++.so与libc++_shared.so有什么区别

主要区别
打包方式:
libc++.so 是系统提供的 C++ 标准库,通常存在于 Android 系统的 /system/lib 目录中。
libc++_shared.so 是由开发者项目自带的 C++ 标准库实现,通常在应用的 lib 目录中。
使用场景:

libc++.so 通常用于系统库或大型应用,其版本与系统版本紧密绑定。
libc++_shared.so 用于应用程序和库的内部,确保在应用中使用一致的 C++ 标准库实现。
依赖管理:

libc++.so 的版本可能随系统更新而改变,依赖于系统的更新和维护。
libc++_shared.so 由应用或库自带,确保库和应用之间的一致性,避免由于系统更新而导致的兼容性问题。

参考文档说明

https://libcxx.llvm.org/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值