You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOSP执行lunch命令报错:ckati未定义符号_ZNSt3__15mutexD1Ev

AOSP lunch命令执行失败(ckati符号缺失)问题排查与解决

问题描述

在AOSP环境中执行以下命令时,lunch命令报错失败:

  • . ./build/envsetup.sh
  • lunch aosp_cf_x86_64-phone-trunk_staging-userdebug
  • m smp-fuzzer

报错信息:

prebuilts/build-tools/linux-x86/bin/ckati: symbol lookup error: prebuilts/build-tools/linux-x86/bin/ckati: undefined symbol: _ZNSt3__15mutexD1Ev

已做排查

  • LLVM和clang版本为13.0.1,今年2月lunch命令可正常执行,仅修改过LD_LIBRARY_PATH;确认无法修改libc代码/libc.so,ckati来自AOSP预编译文件。
  • 使用c++filt解析报错符号,结果为std::__1::mutex::~mutex()(即libc++中std::mutex的析构函数);编写包含std::mutex的简单测试程序,可通过clang编译并正常运行。
  • printenv LD_LIBRARY_PATH输出结果:
    :/scratch/wjw5351/downloads/klee/build/lib:/scratch/wjw5351/opt/libcxx/libc++-build-130/lib:/scratch/wjw5351/downloads/klee/build/lib:/scratch/wjw5351/opt/libcxx/libc++-build-130/lib
    
    尝试单独设置export LD_LIBRARY_PATH=/scratch/wjw5351/opt/libcxx/libc++-build-130/lib,问题仍未解决。
  • 执行ldd prebuilts/build-tools/linux-x86/bin/ckati,输出如下:
    linux-vdso.so.1 (0x00007ffddebdb000)
    libjemalloc5.so => /scratch/wjw5351/aosp_clean/prebuilts/build-tools/linux-x86/bin/../lib64/libjemalloc5.so (0x00007f978bb51000)
    libc++.so => /scratch/wjw5351/opt/libcxx/libc++-build-130/lib/libc++.so (0x00007f978ba4c000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f978ba3a000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f978ba33000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f978b94c000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f978b947000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f978b927000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f978b6fe000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f978be2b000)
    libatomic.so.1 => /lib/x86_64-linux-gnu/libatomic.so.1 (0x00007f978b6f4000)
    

问题原因及解决方法

原因

AOSP预编译的ckati工具是基于AOSP自带的libc编译的,但你的LD_LIBRARY_PATH强制指定了自定义编译的libc库路径,导致运行ckati时加载了不匹配的libc版本。即使自定义libc也是13.0.1版本,AOSP的libc通常包含项目特定补丁或编译配置,二者符号表存在差异,进而出现缺失std::__1::mutex::~mutex()符号的错误。此外,ckati依赖的libjemalloc5.so也可能与自定义libc存在依赖冲突。

解决方法

  1. 临时清空LD_LIBRARY_PATH
    在执行AOSP相关命令前,先重置环境变量,让系统优先加载AOSP预编译工具链自带的库:

    export LD_LIBRARY_PATH=
    . ./build/envsetup.sh
    lunch aosp_cf_x86_64-phone-trunk_staging-userdebug
    
  2. 用子shell隔离环境
    如果需要保留全局的LD_LIBRARY_PATH配置,可以通过子shell单独设置AOSP命令的环境,避免影响全局:

    (export LD_LIBRARY_PATH=; . ./build/envsetup.sh; lunch aosp_cf_x86_64-phone-trunk_staging-userdebug)
    
  3. 验证库加载正确性
    执行以下命令确认ckati加载的是AOSP自带的libc++:

    export LD_LIBRARY_PATH=
    ldd prebuilts/build-tools/linux-x86/bin/ckati | grep libc++.so
    

    正常情况下,输出应指向AOSP预编译目录下的libc++.so,而非自定义路径。

内容的提问来源于stack exchange,提问作者oxyuranus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:03:18