Android P vendor三方模块dlopen failed: library "libstdc++.so" not found, 失败问题分析

12-21 17:47:30.305 4365 4365 E CamX : [ERROR][UTILS ] camxosutilslinux.cpp:874 LibMap() dlopen: dlopen failed: library “libstdc++.so” not found, on ‘/vendor/lib64/camera/components/com.**.so’

现象: 在高通平台上一直三方算法时三方库需要用到 libstdc++.so ,因为在vendor/{lib}中没有找到改so库,报了如上错误,就会导致在createpipe 中的createnode时失败,
原因: libstdc++.so 没有找到,
解决方案: Android O项目,在相关的Android.mk文件中在LOCAL_SHARED_LIBRARIES := 中添加上libstdc++ 即可链接该库编译.

Android P项目,Android 项目找上诉添加会有如下报错:
vendor/node/***/build/android/Android.mk: error: com.***.node.***(native:vendor) should not link to libstdc++ (native:platform)
原因时Android的LL-VNDK 为了降低vendor和框架的耦合度,删除了libstdc++库,此时不能采用编译添加库的方法去fix此问题,
vendor程序在运行时会根据相关setting先去在vendor/{lib},如果没有找到回去遍历其他我们配置的lib path,因为上述libstdc++是在system/{lib}中的,我们就需要添加此path供程序运行时查找,
添加方法:
在system/core/rootdir/etc/ld.config.txt文件中,在[vendor]子项中添加如下:
namespace.default.search.paths += /system/${LIB}
此处还有其他的namespace, 如 vndk, sphal等,如果设置default没有生效,则上述的相关namespace都配置下,然后采用排除法,确定是哪个namespace能解决问题.

Android P的vndk(供应商开发套件)是为了降低vendor和platform的耦合度,方便后续坐系统升级时不用改动vendor而直接更改system即可,不确定上述修改可能会带来的其他风险,但自我评估风险不大,因为vendor里面的程序运行时会先去遍历vendor/{lib}没有找到才会去遍历其他库.

关于vndk的详细介绍可参考: https://source.android.com/devices/architecture/vndk ,如果各位就此问题有更好的解决方法,欢迎沟通.
如有错漏,欢迎斧正,十分感谢.

++++++++++
此修改方案会导致cts, vts测试fail, 建议解决方法是找算法供应商更改,不要使用libstdc++,
另外可以先copy一份libstdc++.so文件到vendor目录下,再在device.mk 文件中添加如下代码行, 则可以在编译时把libstdc++.so打包到vendor.img中
PRODUCT_COPY_FILES += vendor/mediatek/proprietary/hardware/mtkcam/**/libstac++.so:$(TARGET_COPY_OUT_VENDOR)/lib/libstac++.so

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值