(in Fedora 31) building AOSP 9 - flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: failed

本文详细记录了在使用Flex 2.5.39版本进行编译时遇到的错误,包括_assertion失败和成员引用类型错误,并提供了具体的解决步骤,如删除并重新构建Flex,以及如何正确地重新配置和编译。

# 错误
    flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertion 'cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
    /bin/sh: line 1: 58421 Aborted                 (core dumped) /mnt/android/Android-x86---pie-x86---9.0-rc1/prebuilts/misc/linux-x86/flex/flex-2.5.39 -oscripts/kconfig/zconf.lex.c -L /mnt/android/Android-x86---pie-x86---9.0-rc1/kernel/scripts/kconfig/zconf.l
# 解决
    rm prebuilts/misc/linux-x86/flex/flex-2.5.39
    ln -s /usr/bin/flex prebuilts/misc/linux-x86/flex/flex-2.5.39
# 根据上面修改,又出现如下错误。    解决方法:rebuild the included flex,如下步骤
    out/soong/.intermediates/frameworks/compile/mclinker/lib/Script/libmcldScript/android_x86_64_core_static/gen/lex/frameworks/compile/mclinker/lib/Script/ScriptScanner.cpp:1487:8: error: member reference type 'std::istream *' (aka 'basic_istream<char> *') is a pointer; did you mean to use '->'?
                        yyin.rdbuf(std::cin.rdbuf());
    out/soong/.intermediates/frameworks/compile/mclinker/lib/Script/libmcldScript/android_x86_64_core_static/gen/lex/frameworks/compile/mclinker/lib/Script/ScriptScanner.cpp:1490:9: error: member reference type 'std::ostream *' (aka 'basic_ostream<char> *') is a pointer; did you mean to use '->'?
                        yyout.rdbuf(std::cout.rdbuf());
# 接着,rm prebuilts/misc/linux-x86/flex/flex-2.5.39
# rebuild the included flex

    cd prebuilts/misc/linux-x86/flex
    rm flex-2.5.39
    tar zxf flex-2.5.39.tar.gz
    cd flex-2.5.39
    ./configure
    make
    mv flex  ..
    cd ..
    rm flex-2.5.39 -rf
    mv flex flex-2.5.39
    cd /mnt/android/Android-x86---pie-x86---9.0-rc1
    m -j12 iso_img

 

### 依赖错误的解决方法 在安装 `cri-dockerd` 时,如果遇到依赖错误提示 `containerd.io >= 1.2.2-3 is needed`,这意味着当前系统中缺少满足要求的 `containerd.io` 版本,或者系统仓库中没有提供符合要求的版本。以下是解决该问题的详细方法: 1. **手动下载并安装 `containerd.io`** 如果系统仓库中没有合适的 `containerd.io` 包,可以通过手动下载并安装指定版本来解决依赖问题。例如: ```bash wget https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm rpm -ivh containerd.io-1.2.6-3.3.fc30.x86_64.rpm ``` 这种方法可以绕过仓库中版本不足的问题,并确保安装的 `containerd.io` 满足依赖要求 [^4]。 2. **使用 Docker 官方仓库安装** 添加 Docker 官方仓库后,系统可以获取到兼容的 `containerd.io` 包。例如: ```bash yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum makecache fast yum install containerd.io ``` 通过官方仓库安装可以确保依赖关系的完整性,并避免手动下载的复杂性。 3. **检查系统架构与仓库配置** 如果系统是 CentOS 8 或其他较新版本,但尝试安装 CentOS 7 的包,可能会出现依赖冲突。例如,在 CentOS 8 中按照 CentOS 7 的步骤安装时,会出现缺少 `containerd.io >= 1.2.2-3` 的错误提示 [^2]。因此,需要确保仓库配置与系统版本一致。 4. **更新系统并清理缓存** 有时,系统缓存可能导致依赖关系解析失败。可以通过以下命令更新系统并清理缓存: ```bash dnf clean all dnf makecache dnf update ``` 清理缓存后重新安装可以避免因元数据过期或损坏导致的依赖问题。 5. **使用替代仓库** 如果官方仓库无法提供所需的 `containerd.io` 版本,可以尝试添加其他可信仓库,例如 Fedora 的仓库。例如: ```bash yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm ``` 这种方法可以解决因仓库版本不匹配导致的依赖缺失问题 [^4]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值