首页 > 解决方案 > 如何清理 AOSP 中的共享库

问题描述

我的 HAL 是一个共享库。我想单独为共享库进行地址清理。我在将 HAL 构建为共享库的文件 (Android.mk) 中添加了以下行。

  1. LOCAL_SANITIZE:=地址
  2. LOCAL_MODULE_RELATIVE_PATH := asan

然后我得到一个错误,比如“ (SHARED_LIBRARIES android-x86_64) missing libasan.vendor (STATIC_LIBRARIES android-x86_64) ”。所以我在所有依赖的静态库中添加了 sanitize 标志。其中一个库有 Android.bp 文件而不是 Android.mk,所以我添加了 sanitize: {address: true},然后它通过错误(模块“libaudiohw_legacy”变体“android_x86_64_silvermont_static_core”:取决于禁用的模块“libasan”

根据文档(https://source.android.com/devices/tech/debug/asan),我读到,由于 ASan 的工作方式,使用 ASan 构建的库只能由使用 ASan 构建的可执行文件使用. 因此,我通过添加以下两行将可执行文件设置为 asan。删除了所有其他更改。 LOCAL_SANITIZE:=address LOCAL_MODULE_RELATIVE_PATH := asan 然后可执行文件和可执行文件下的共享库也放入 /system/lib/asan 而不是 /system/lib。但是在启动时,启动库将搜索 /system/lib 中的二进制文件,它不会找到并且也不会启动。

安卓版本----奥利奥8.1.0_r33

如果有人有适当的步骤/文档来清理共享库,请帮助我。

标签: address-sanitizer

解决方案


我按照以下链接构建本机库和二进制文件以进行地址清理,它对我来说很好用。

https://source.android.com/devices/tech/debug/asan#sanitizing_individual_executables_with_asan

脚步:

  1. 做回购同步
  2. 给一个干净的构建
  3. 构建准备好后,在 Android 中为本地库和二进制文件生成所需的更改。
  4. 在不删除任何旧中间体的情况下再次进行构建。

推荐阅读