1. Ubuntu 22.04 下 OpenHarmony 6.0 编译问题全记录与解决方案
作为一名长期从事嵌入式开发的工程师,最近在 Ubuntu 22.04 系统上为 RK3568 平台适配 OpenHarmony 6.0 时,遇到了各种棘手的编译问题。本文将详细记录整个调试过程,分享最终解决方案,希望能帮助遇到类似问题的开发者少走弯路。
1.1 环境准备与初始问题
我的开发环境配置如下:
- 主机系统:Ubuntu 22.04 LTS
- 开发板:RK3568
- OpenHarmony 版本:6.0
- 编译工具链:OpenHarmony 官方提供的 clang 15.0.4
初始编译命令:
bash复制./build.sh \
--product-name rk3568 \
--target-cpu arm64 \
--ccache \
--build-target=foundation/bundlemanager/bundle_framework:libbundle_ndk.z \
-j1
遇到的第一个关键错误是:
code复制error: -shared flag is unused in compilation phase [-Werror,-Wunused-command-line-argument]
1.2 问题分析与解决方案
1.2.1 错误原因分析
这个错误的核心原因是:在 CFLAGS 中给编译阶段(CXX)添加了 -shared 标志,而这个标志本应只属于链接阶段。Clang 检测到"未使用的命令行参数"并触发 -Werror 报错(OpenHarmony 默认开启所有警告视为错误)。
1.2.2 解决方案
- 首先需要创建一个合法的空 C++ 文件,避免编译空文件报错:
bash复制cd ~/openharmony6
cat > foundation/bundlemanager/bundle_framework/bundle_empty.cpp << EOF
// 合法的空 C++ 文件,满足编译规范
#include <cstdint>
// 空命名空间,确保文件有合法内容
namespace OHOS {
namespace AppExecFwk {
} // namespace AppExecFwk
} // namespace OHOS
EOF
- 清理之前的编译缓存:
bash复制rm -rf out/rk3568/bundlemanager/
rm -rf out/rk3568/obj/foundation/bundlemanager/
- 修改 BUILD.gn 文件,移除编译阶段的 -shared 标志,仅保留链接阶段的动态库配置。
1.3 编译配置修正
修改 foundation/bundlemanager/bundl
