今天公司两台电脑刷了Ubuntu的22.04的系统,想着22出了这么长时间了,应该没啥问题,但是在下载了公司项目编译AOSP的时候报下面的错误:
ninja: no work todo.
No need to regenerate ninja file
No need to regenerate ninja file
[0%1/4440]//system/tools/aidl:libaidl-common lex aidl_language_l.ll [linux_glibc]
FAILED: out/soong/.intermediates/system/tools/aidl/libaidl-common/linux_glibc_x86_64_static/gen/lex/system/tools/aidl/aidl_language_l.cpp
prebuilts/misc/linux-x86/flex/flex-2.5.39 -oout/soong/.intermediates/system/tools/aidl/libaidl-common/linux_glibc_x86_64_static/gen/lex/system/tools/aidl/aidl_language_l.cpp system/tools/aidl/aidl_language_l.ll
flex-2.5.39: loadlocale.c:130:_nl_intern_locale_data: ??'cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' ???
Aborted (core dumped)
[0%8/4440]//external/libcxxabi:libc++abi clang++ src/stdlib_new_delete.cpp [linux_glibc]
ninja: build stopped: subcommand failed.
18:04:05 ninja failed with: exit status 1
你Google可能给你的答案是在.bashrc中添加 LC_ALL=C,然后执行
$ source ~/.bashrc
不过我这是无效的,原因待查(猜测可能是因为AOSP中的flex可执行文件在Ubuntu22上运行不兼容)
你还可能Google到让在build/envsetup.sh 最后加上 LC_ALL=C再进行make编译,不过在我这也是无效的
最终的解决方式是重新编译下AOSP/prebuilts/misc/linux-x86下的flex库
具体命令是:
you:AOSP/prebuilts/misc/linux-x86/flex$ ll //你可能会看到:flex-2.5.39(可执行文件)、flex-2.5.39.tar.gz(flex压缩包)
you:AOSP/prebuilts/misc/linux-x86/flex$ mkdir flex-2.5.39.source
you:AOSP/prebuilts/misc/linux-x86/flex$ tar -zxvf flex-2.5.39.tar.gz -C flex-2.5.39.source/
you:AOSP/prebuilts/misc/linux-x86/flex$ cd flex-2.5.39.source
you:AOSP/prebuilts/misc/linux-x86/flex-2.5.39.source$ mkdir install
you:AOSP/prebuilts/misc/linux-x86/flex-2.5.39.source$ cd flex-2.5.39
安装到刚才创建的install目录,绝对地址:
you:AOSP/prebuilts/misc/linux-x86/flex-2.5.39.source/flex-2.5.39$ ./configure --prefix=/home/you/xxxxxxxxxxxxxxxxxx/AOSP/prebuilts/misc/linux-x86/flex/flex-2.5.39.source/install/
you:AOSP/prebuilts/misc/linux-x86/flex-2.5.39.source/flex-2.5.39$ make
you:AOSP/prebuilts/misc/linux-x86/flex-2.5.39.source/flex-2.5.39$ make install
you:AOSP/prebuilts/misc/linux-x86/flex-2.5.39.source/flex-2.5.39$ cd ../install
you:AOSP/prebuilts/misc/linux-x86/flex-2.5.39.source/flex-2.5.39/install$ ls
将bin下flex 可执行文件替换掉AOSP/prebuilts/misc/linux-x86/flex下的flex-2.5.39可执行文件重新编译即可。