Qt for HarmonyOS/qt5 Host Build zh: Difference between revisions
| (One intermediate revision by the same user not shown) | |||
| Line 57: | Line 57: | ||
<source lang="bash"> | <source lang="bash"> | ||
BUILD_DIR=/storage/Users/currentUser/ | BUILD_DIR=/storage/Users/currentUser/workspace/Qt-5.12.12/qt5.12.12-build | ||
INSTALL_DIR=/storage/Users/currentUser/Qt-5.12.12-harmonyos | INSTALL_DIR=/storage/Users/currentUser/Qt-5.12.12-harmonyos | ||
SRC_DIR=/storage/Users/currentUser/tqtc-qt5 | SRC_DIR=/storage/Users/currentUser/Qt-5.12.12/tqtc-qt5 | ||
mkdir -p "$BUILD_DIR" | mkdir -p "$BUILD_DIR" | ||
| Line 72: | Line 72: | ||
-nomake examples \ | -nomake examples \ | ||
-skip qtwebengine \ | -skip qtwebengine \ | ||
-skip qtactiveqt \ | |||
-skip qtandroidextras \ | |||
-skip qtcanvas3d \ | |||
-skip qtfeedback \ | |||
-skip qtgamepad \ | |||
-skip qtmacextras \ | |||
-skip qtpim \ | |||
-skip qtpurchasing \ | |||
-skip qtremoteobjects \ | |||
-skip qtsystems \ | |||
-skip qtwayland \ | |||
-skip qtwinextras \ | |||
-skip qtx11extras \ | |||
-skip qtvirtualkeyboard \ | |||
-prefix "$INSTALL_DIR" \ | -prefix "$INSTALL_DIR" \ | ||
QMAKE_CXXFLAGS+="-Wno-error" \ | QMAKE_CXXFLAGS+="-Wno-error" \ | ||
| Line 107: | Line 121: | ||
预期输出: | 预期输出: | ||
<pre> | <pre>QMake version 3.1 | ||
QMake version 3.1 | Using Qt version 5.12.12 in /storage/Users/currentUser/Qt-5.12.12-harmonyos/lib</pre> | ||
Using Qt version 5.12.12 in /storage/Users/currentUser/Qt-5.12.12-harmonyos/lib | |||
</pre> | |||
2. 检查核心库及 QPA 平台插件: | 2. 检查核心库及 QPA 平台插件: | ||
<source lang="bash"> | <source lang="bash">ls "$INSTALL_DIR/lib/libQt5Core.so" \ | ||
ls "$INSTALL_DIR/lib/libQt5Core.so" \ | |||
"$INSTALL_DIR/lib/libQt5Gui.so" \ | "$INSTALL_DIR/lib/libQt5Gui.so" \ | ||
"$INSTALL_DIR/lib/libQt5Widgets.so" \ | "$INSTALL_DIR/lib/libQt5Widgets.so" \ | ||
| Line 122: | Line 133: | ||
# 检查 OHOS QPA 平台插件 | # 检查 OHOS QPA 平台插件 | ||
ls "$INSTALL_DIR/plugins/platforms/libqohos.so" | ls "$INSTALL_DIR/plugins/platforms/libqohos.so"</source> | ||
</source> | |||
== 附录:打包与编译鸿蒙应用 == | == 附录:打包与编译鸿蒙应用 == | ||
Latest revision as of 09:45, 23 October 2026
在 HarmonyOS PC (aarch64) 上原生编译 Qt 5.12.12
本文介绍如何在 HarmonyOS PC(aarch64 架构、鸿蒙内核)环境中使用 Harmonybrew 包管理器配置构建环境,并从源代码原生编译 Qt 5.12.12(`tqtc/harmonyos-5.12.12` 分支)以及打包鸿蒙应用的全流程。
1. 安装 Harmonybrew 包管理器
Harmonybrew 是鸿蒙平台上的 Homebrew 包管理器。在终端运行以下命令进行安装:
zsh -c "$(curl -fsSL https://harmonybrew.atomgit.com/install.sh)"
配置环境变量并写入 `~/.zshrc`:
echo 'eval "$(/storage/Users/currentUser/.harmonybrew/bin/brew shellenv)"' >> ~/.zshrc
eval "$(/storage/Users/currentUser/.harmonybrew/bin/brew shellenv)"
2. 安装编译依赖
使用 Harmonybrew 安装 Qt 构建所需的工具链及 OpenHarmony SDK:
brew install make # GNU Make 4.4.1
brew install perl # Perl (Qt 构建系统依赖)
brew install python # Python 3 (qtdeclarative 模块依赖)
brew install ninja # Ninja 构建工具
brew install gperf # gperf (Qt 构建依赖)
brew install ohos-sdk # OpenHarmony SDK (包含 sysroot + llvm 工具链 + hdc)
3. 配置环境变量
将 OHOS SDK 环境变量写入 `~/.zshrc` 进行持久化:
cat >> ~/.zshrc << 'EOF'
# OHOS SDK 环境变量 (Qt 编译用)
export NATIVE_OHOS_SDK="/storage/Users/currentUser/.harmonybrew/opt/ohos-sdk/native"
# 将 SDK 的 llvm/bin 和 Python 加入 PATH
export PATH="$NATIVE_OHOS_SDK/llvm/bin:/storage/Users/currentUser/.harmonybrew/opt/python@3.14/libexec/bin:/storage/Users/currentUser/.harmonybrew/bin:$PATH"
EOF
source ~/.zshrc
4. 获取 Qt 源代码
5. 配置 Qt (Out-of-source 构建)
在源码树外创建独立的构建目录,并运行 `configure`:
BUILD_DIR=/storage/Users/currentUser/workspace/Qt-5.12.12/qt5.12.12-build
INSTALL_DIR=/storage/Users/currentUser/Qt-5.12.12-harmonyos
SRC_DIR=/storage/Users/currentUser/Qt-5.12.12/tqtc-qt5
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
"$SRC_DIR/configure" \
-platform ohos-native-clang \
-opensource \
-confirm-license \
-release \
-nomake tests \
-nomake examples \
-skip qtwebengine \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtfeedback \
-skip qtgamepad \
-skip qtmacextras \
-skip qtpim \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtsystems \
-skip qtwayland \
-skip qtwinextras \
-skip qtx11extras \
-skip qtvirtualkeyboard \
-prefix "$INSTALL_DIR" \
QMAKE_CXXFLAGS+="-Wno-error" \
QMAKE_CFLAGS+="-Wno-error"
关键参数说明:
- `-platform ohos-native-clang`: 使用 OHOS 原生编译 mkspec(在 arm64 设备上进行原生编译)。
- `QMAKE_CXXFLAGS+="-Wno-error"` / `QMAKE_CFLAGS+="-Wno-error"`: 禁用 `-Werror`,避免高版本 Clang 编译器因严格警告导致编译中断。
6. 编译与安装
使用全部 CPU 核心进行并行构建:
cd "$BUILD_DIR"
make -j$(nproc)
注:在多核并行编译时,若个别模块因竞争条件报错退出,只需重新运行 `make -j$(nproc)` 确认。当输出全是 "Nothing to be done" 时即代表编译成功。
编译完成后执行安装:
make install
7. 验证安装结果
1. 检查 `qmake` 版本:
"$INSTALL_DIR/bin/qmake" --version
预期输出:
QMake version 3.1 Using Qt version 5.12.12 in /storage/Users/currentUser/Qt-5.12.12-harmonyos/lib
2. 检查核心库及 QPA 平台插件:
ls "$INSTALL_DIR/lib/libQt5Core.so" \
"$INSTALL_DIR/lib/libQt5Gui.so" \
"$INSTALL_DIR/lib/libQt5Widgets.so" \
"$INSTALL_DIR/lib/libQt5Qml.so" \
"$INSTALL_DIR/lib/libQt5Quick.so"
# 检查 OHOS QPA 平台插件
ls "$INSTALL_DIR/plugins/platforms/libqohos.so"
附录:打包与编译鸿蒙应用
编写项目文件
创建一个简单的 Qt/QML 应用(例如目录 `myapp`):
`myapp.pro`:
QT += qml quick gui
CONFIG += c++11 qt qml
TEMPLATE = lib
CONFIG -= app_bundle
TARGET = myapp
SOURCES += main.cpp
RESOURCES += qml.qrc编译应用库
在终端设置环境变量并调用编译出来的 `qmake` 构建共享库:
export NATIVE_OHOS_SDK="/storage/Users/currentUser/.harmonybrew/opt/ohos-sdk/native"
export PATH="$NATIVE_OHOS_SDK/llvm/bin:/storage/Users/currentUser/.harmonybrew/opt/python@3.14/libexec/bin:/storage/Users/currentUser/.harmonybrew/bin:$PATH"
/storage/Users/currentUser/Qt-5.12.12-harmonyos/bin/qmake myapp.pro
make -j$(nproc)
# 生成产物:libmyapp.so (ELF 64-bit arm64, target aarch64-linux-ohos)
部署与打包
1. 使用 `openharmonydeployqt` 部署模板:
/storage/Users/currentUser/Qt-5.12.12-harmonyos/bin/openharmonydeployqt \
--template-dir /storage/Users/currentUser/tqtc-qt5/qtbase/src/harmonyos/templates \
--output-dir /path/to/deploy \
--library /path/to/libmyapp.so \
--sdk-dir /storage/Users/currentUser/.harmonybrew/opt/ohos-sdk
2. 复制依赖库至工程目录:
# 复制 Qt 核心依赖库及插件
cp /storage/Users/currentUser/Qt-5.12.12-harmonyos/lib/libQt5{Core,Gui,Qml,Quick,Network}.so deploy/entry/libs/arm64-v8a/
cp /storage/Users/currentUser/Qt-5.12.12-harmonyos/plugins/platforms/libqohos.so deploy/entry/libs/arm64-v8a/
# 复制 C++ 运行时库
find /storage/Users/currentUser/.harmonybrew/opt/ohos-sdk/native -name "libc++_shared.so" -exec cp {} deploy/entry/libs/arm64-v8a/ \;
3. 修改应用入口加载库: 编辑 `deploy/entry/src/main/ets/common/QtAppConstants.ets`,将 `APP_LIBRARY_NAME` 修改为生成的动态库名称:
export const APP_LIBRARY_NAME = 'libmyapp.so';
4. 使用 DevEco Studio 打开 `deploy/` 目录,即可直接进行构建、签名与设备部署。