为 OpenHarmony / HarmonyOS 6.1 构建的 llvm-mingw 20260717 (ARM64)
为 OpenHarmony / HarmonyOS 6.1 构建的 llvm-mingw 20260717
源代码:
使用方法
-
安装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或通过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很可能依然无法在鸿蒙上直接运行,需要进行其他调整。这里有我调整后可以运行的wine(暂无GUI,仅限命令行使用):https://github.com/SwimmingTiger/wine/releases