Flex编译错误 - unable to open “frameworks\locale\zh_CN’ 解决方法

本文介绍了解决FlashBuilder4.0环境下构建摄像头拍照项目时出现的编译错误的方法。通过更改项目的编译器参数中的语言设置从中文(zh_CN)到英文(en_US),成功解决了无法打开特定路径的问题。

环境:FlashBuilder4.0,Windows7 sp2

 

问题:编写摄像头拍照的Flash,在构建项目时提示错误如下.

unable to open

'E:\DevelopKit\FlashBuilder\Adobe Flash Builder 4\sdks\3.5.0\frameworks\locale\zh_CN'

Picture  未知   Flex 问题

 

解决方案:"项目" -> "属性" -> "Flex编译器" -> "附加的编译器参数"

将  "-locale zh_CN" 更改为 "-locale en_US"

### 编译 Android 源码时遇到 flex 报错和 ninja 构建失败的解决方案 在 Ubuntu 22.04 上编译 Android 源码时,可能会遇到如下错误: ``` 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 Aborted (core dumped) ninja: build stopped: subcommand failed. ``` 这类问题通常与系统本地化环境、flex 工具版本或构建工具链有关。 #### 设置本地化环境变量 此类错误往往由 locale 设置不兼容导致。可以通过设置 `LC_ALL=C` 来禁用本地化支持以绕过该问题: ```bash export LC_ALL=C ``` 将该命令写入 `~/.bashrc` 文件中,确保每次终端启动时自动生效: ```bash echo "export LC_ALL=C" >> ~/.bashrc source ~/.bashrc ``` 此方法可有效避免因 locale 数据解析异常引发的崩溃问题 [^2]。 #### 使用 Python 脚本替换 lexer.ll 内容 如果上述方式仍无法解决问题,可以尝试修改 `lexer.ll` 文件内容,规避 flex 对某些 locale 数据的依赖。具体做法是使用一个 Python 脚本来替代原始的 `lexer.ll` 文件,使其生成更稳定的 C++ 代码: ```python import sys def main(): if len(sys.argv) != 3: print("Usage: python lexer_fix.py input_file output_file") return with open(sys.argv[1], 'r') as f_in, open(sys.argv[2], 'w') as f_out: f_out.write("/* AUTOGENERATED FILE - DO NOT MODIFY */\n\n") f_out.write("int yylex() {\n return 0;\n}\n") if __name__ == "__main__": main() ``` 运行脚本前,请确保已安装 Python 环境并具有执行权限: ```bash sudo apt install python-is-python3 chmod +x lexer_fix.py ``` 然后手动替换 `bootable/recovery/edify/lexer.cpp` 的生成逻辑: ```bash ./lexer_fix.py bootable/recovery/edify/lexer.ll out/target/product/generic/obj/STATIC_LIBRARIES/libedify_intermediates/lexer.cpp ``` 这样可跳过原生 flex 工具对 locale 数据的处理流程 。 #### 升级或降级 flex 版本 Ubuntu 22.04 默认提供的 `flex` 版本可能与 Android 构建工具链不兼容。建议尝试升级到更高版本(如 `flex-2.6.x`)或回退到旧版本(如 `flex-2.5.35`): ```bash sudo apt remove flex sudo apt install flex=2.6.x ``` 若官方仓库未提供所需版本,可从源码编译安装指定版本的 `flex`: ```bash wget https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz tar zxvf flex-2.6.4.tar.gz cd flex-2.6.4 ./configure && make && sudo make install ``` 确保新安装的 `flex` 命令被正确识别: ```bash which flex flex --version ``` #### 清理构建缓存重新编译 若问题依旧存在,建议清理所有中间文件并重新开始构建: ```bash make clean make clobber source build/envsetup.sh lunch aosp_arm-eng make -j$(nproc) ``` 此操作可避免因残留文件冲突导致的构建失败 。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值