Jump to content

Qt for HarmonyOS/qt5 Host Build zh: Difference between revisions

From Qt Wiki
 
Line 57: Line 57:


<source lang="bash">
<source lang="bash">
BUILD_DIR=/storage/Users/currentUser/workspace/Qt5/qt5.12.12-build
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 121: 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 136: 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 源代码

参考: 如何获取 Qt for HarmonyOS 源代码

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/` 目录,即可直接进行构建、签名与设备部署。