遭遇OHOS编译错误及解决过程

文章讲述了作者在更换机器后编译OpenHarmony时遇到的FALLTHROUGH和Missingseperation错误,介绍了如何通过#pragmaGCCdiagnostic、attribute和修复Makefile等问题来解决编译过程中的错误。

换了一台机器编译openharmony,记录编译过程中遇到的错误及解决方法。

FALLTHROUGH错误

编译过程第三方库编译报错。查看日志,是因为配置了-Werror=implicit-fallthrough编译选项,导致原先的警告被作为错误处理。几种修改方案:

  1. 库的编译选项取消该选项
  2. 使用pragma
#pragma GCC diagnostic push			/* 入栈当前编译选项 */
#pragma GCC diagnostic ignored "-Werror=implicit-fallthrough"   /* 忽略FALLTHROUGH错误选项 */
    foo(b);         /* 忽略FALLTHROUGH错误选项的代码段 */
#pragma GCC diagnostic pop /* 弹出原编译选项 */

上述方法,同样适用于其他类似的临时忽略某些编译选项的场合。

  1. 使用 atttribut
    在需要FALLTHROUGH的代码,原先写break的位置加上__attribute__((fallthrought));
case 1:
	foo1();
	__attribute__((__fallthrought__));  /* 注意是两个括号 */
case xxx:
	...

Missing seperation, stop错误

网上搜了很久,有很多答案。

  1. dash未修改为bash
    解决方案:
sudo dpkg-reconfigure dash  #选择 NO

检查shell软链接,没有问题。

  1. Makefile格式中缩进使用空格对齐或TAB,文件中有非ASC字符的问题
    解决方案:编辑makefile,排除以上问题
    看了一下出错的工程makefile,缩进使用的是空格,但是编译通过的工程,也是同样的格式,基本可以排除这个问题。

  2. ninja、gn工具链和python版本的问题
    解决方案: 修改python、python3的链接目标,或这使用python版本管理工具
    检查了python, python3都指向相同的位置,和编译命令中的python位置是一致的的,基本可以排除此问题。

  3. 缺少可执行文件或库
    解决方案:安装对应的程序,并增加到$PATH,具体的问题需要从编译日志中排查。
    具体到此次的问题,错误日志

makefile 40 missing separator.stop:
...

上下文中没有明显的缺少内容的提示,这也是一开始没有往这方面考虑的主要原因。实在没办法了,才又回到原点,查看出错的makefile,对应上述信息的位置

$(foreach line,$(shell hb env | sed 's/\[OHOS INFO\]/ohos/g;s/ /_/g;s/:_/=/g' || true),$(eval $(line)))

其中有用到“hb env”。于是,赶紧看了一眼,赫然显示

Necessary package: bison, ccache, default-jdk, flex, ...
Installed package: bison, ccache, flex, ...
Uninstalled package: default-jdk, ...

按照以上要求,安装所需包,重新编译,通过。
本来官方编译环境搭建中,有要求安装上述库和程序,比如scons,但是在使用IDE中,这些库需要在IDE中重新再安装一遍。因此在搭建编译环境的过程中特意跳过了这几重复安装包,没想到就在这里翻车了。

关于Makefile的几个函数

上面的Makefile语句中用到了几个函数,简单记录一下涉及上述内容的用法。

foreach用法

遍历列表成员

foreach var, list,do

遍历列表list里面的每一个成员,用var代表,使用do对meige var完成操作。

sed 用法

查找替换,这里用管道操作代替了文件名

sed 's/old/new/g;s/old1/new1/op2' filename

sed 选项 ‘条件格式指令;条件格式指令’ 文件名,此处使用了替换指令s,查找全部(/g) old替换为new

eval 用法

把文本当做makefile指令执行

eval text

把text当做Makefile命令进行执行

通过所上述的Makefile指令,重新赋值了一些变量。

ohos_Necessary_package=bison,...
ohos_Installed_package=bison,...
ohos_Uninstalled_package=
ohos_root_path=...
ohos_board=...
ohos_kernel=...
ohos_product=...
ohos_product_path=...
ohos_device_path=...
ohos_device_company=...
<think>好的,我现在需要帮用户解决编译鸿蒙系统4.1时遇到的Python环境冲突问题。用户提到参考了站内的引用,其中引用[1]提到了使用update-alternatives命令来设置Python版本。根据之前的回答,用户可能已经尝试过这些步骤,但可能还存在问题。 首先,我需要确认用户的环境是否符合鸿蒙4.1的编译要求。根据之前的步骤,鸿蒙4.1需要Python 3.8或3.9,而用户可能同时安装了多个版本,导致冲突。用户可能在使用pip时混淆了不同版本的Python,或者系统默认的Python版本不正确。 接下来,我需要检查用户是否正确地配置了Python的符号链接。引用[1]中的命令使用update-alternatives来管理Python版本,这可以帮助用户切换默认的Python。但用户可能需要确认路径是否正确,特别是Python 3.8的安装路径是否正确指定。 另外,用户可能在编译过程中调用了错误的Python版本,比如在运行脚本时使用了python而不是python3,或者pip安装的包没有对应到正确的Python环境。建议用户使用python3和pip3明确指定版本,避免混淆。 虚拟环境也是一个解决方案,可以隔离项目所需的依赖,防止全局环境的冲突。用户可能没有使用venv创建独立环境,导致不同项目间的依赖干扰。需要指导用户如何创建和激活虚拟环境,并在其中安装ohos-build等必要包。 最后,用户可能忽略了环境变量的设置,比如PATH变量可能优先指向了错误的Python版本。需要检查PATH的顺序,确保系统优先使用正确的Python路径。 还需要考虑用户是否在编译前执行了prebuilts_download.sh,确保所有依赖已正确安装。如果依赖缺失,可能会导致编译过程中的意外错误,被误认为是Python冲突。 总结来说,解决方案应包括确认Python版本、正确配置符号链接、使用虚拟环境、明确指定命令版本、检查环境变量以及验证依赖完整性。同时,结合引用中提到的烧录和编译指南,确保整个流程的步骤正确,避免其他环节的问题影响判断。</think>根据您提供的引用内容和鸿蒙系统编译实践经验,以下是针对Python环境冲突的详细解决方案: ### Python环境冲突解决方案(适配OpenHarmony 4.1) #### 1. 版本确认与优先级设置 鸿蒙4.1标准系统编译要求Python 3.8/3.9版本[^2][^4],建议通过以下命令建立版本映射: ```bash # 查询Python 3.8实际路径(示例路径) which python3.8 → /usr/bin/python3.8 # 设置系统级Python软链接 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1 sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1 ``` 验证配置结果: ```bash update-alternatives --config python # 选择数字序号确认3.8为默认版本 ``` #### 2. 虚拟环境隔离(推荐方案) ```bash # 创建独立环境 python -m venv ~/ohos_venv # 激活环境 source ~/ohos_venv/bin/activate # 安装编译依赖 pip install ohos-build==0.4.13 # 版本需匹配4.1 Release要求[^4] ``` #### 3. 关键路径验证 ```bash # 检查环境变量优先级 echo $PATH | tr ':' '\n' # 确保venv路径在系统路径之前 # 验证Python关联性 which python → 应显示~/ohos_venv/bin/python python --version → Python 3.8.x ``` #### 4. 编译环境修复 ```bash # 清除历史配置 rm -rf ~/.ohos_build_chain # 重新初始化编译链 build/prebuilts_download.sh # 特别注意Python包下载完整性[^4] ``` #### 5. 典型报错处理 **场景:** `Unresolved reference 'sysconfig'` **解决方案:** ```bash # 修复Python标准库缺失 sudo apt-get install python3.8-venv python3.8-distutils ``` **场景:** `pip版本不匹配` **解决方案:** ```bash # 强制更新pip工具 python -m pip install --upgrade --force-reinstall pip ``` ### 验证流程 ```bash # 阶段验证命令 hb --version # 应显示ohos_build版本信息 python -c "import hb" # 无报错表示环境正常 # 执行测试编译 ./build.sh --product-name rk3568 --target-cpu arm64 --build-target make_test ``` ### 扩展建议 1. 建议使用`pyenv`工具管理多版本Python环境[^1] 2. 编译前执行`python -m site`检查模块加载路径 3. 定期清理`~/.cache/pip`缓存目录防止旧包残留 [^1]: Python版本管理工具配置指南 [^2]: OpenHarmony 4.1编译环境要求 [^4]: 官方编译问题解决方案库
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值