llvm-mingw-20260718-ucrt-ohos-arm64.tar.xz(161.26 MB)
源代码:
安装Python3(从鸿蒙应用商店安装Python安装器,或者安装Harmonybrew并用brew install python3进行安装)。
解压压缩包:
tar -Jvxf llvm-mingw-20260718-ucrt-ohos-arm64.tar.xz
测试命令是否可运行:
cd llvm-mingw-20260718-ucrt-ohos-arm64
./bin/arm64ec-w64-mingw32-clang --version
如果提示Permission denied,请用以下命令进行签名(签名需要安装DevBox或者安装Harmonybrew并用brew install ohos-sdk安装OHOS SDK):
python3 ./ohos-sign-elf.py --resign ./
设置环境变量,让 llvm-mingw 在 PATH 中位于 OHOS SDK 的 llvm 之后,这样 native ELF 就会通过 OHOS SDK 的 clang 构建,并且需要 mingw 的项目也可以从 PATH 中找到 arm64ec-w64-mingw32-clang 等命令。
比如(自己把$HOME/work/llvm-mingw/改为实际路径):
export OHOS_SDK="$HOME/.harmonybrew/Cellar/ohos-sdk/26.0.0.18_1"
export LLVM_MINGW="$HOME/work/llvm-mingw/llvm-mingw-20260718-ucrt-ohos-arm64"
# OHOS SDK clang 优先
export PATH="$OHOS_SDK/native/llvm/bin:$LLVM_MINGW/bin:$PATH"
构建 wine 时可以这样配置:
cd wine
mkdir build
# 防止 winebuild 找不到动态库
export LDFLAGS="-Wl,-rpath,$HOME/.harmonybrew/lib"
# Host ELF 使用 OHOS SDK clang 构建
export CC=clang CXX=clang++
# PE DLL 使用 llvm-mingw clang 构建
../configure --prefix=$PWD/dist \
--build=aarch64-unknown-linux-ohos \
--host=aarch64-unknown-linux-ohos \
--with-mingw=$LLVM_MINGW/bin/clang \
--enable-archs=arm64ec,aarch64,i386 \
--disable-tests \
--without-x
make -j$(nproc)
在x86 Linux上交叉编译不需要我这个工具链,安装上游llvm-mingw工具链即可。只有在鸿蒙PC上本地构建需要它。
上游wine的ARM64EC构建似乎会报错,而且就算构建成功也无法直接运行x86 exe,需要添加并注册libarm64ecfex.dll、wowbox64.dll等二进制翻译DLL后才能运行。实际可用的ARM64EC版wine以及libarm64ecfex.dll、wowbox64.dll等二进制翻译DLL可通过hangover项目进行构建。
编译 wine 时出现找不到 libfreetype.so.6、libxml2.so.16 等库的情况,请设置 LD_LIBRARY_PATH 环境变量并删除build文件夹重新构建:
export LDFLAGS="-Wl,-rpath,$HOME/.harmonybrew/lib"
建议不要设置 LD_LIBRARY_PATH 环境变量,否则可能会遇到各种奇怪的库加载失败问题,原因是系统可执行文件无法加载自签名的库。
如果构建出来的wine无法运行,请通过 python3 ./ohos-sign-elf.py $HOME/llvm-mingw/wine-install-dir 进行签名。
你需要一个 Wayland Server 才能让 wine 显示出窗口,请参考 https://github.com/winehua/WineHua 的实现方法。
如果 wineboot 直接崩溃,请尝试删除 lib/wine/aarch64-unix/wine-preloader 文件,它很可能是导致崩溃的原因。不过删除之后arm64 wine很可能依然无法在鸿蒙上直接运行,需要进行其他调整。