You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell交叉编译ARM处理器报错求助:Hadrian构建失败排查

Haskell交叉编译到Android aarch64失败:Unknown OS android

问题分析

报错中的Unknown OS android表明GHC的构建系统(configure + Hadrian)默认未将Android识别为支持的操作系统——即便Android基于Linux内核,GHC的平台检测逻辑也需要明确适配才能正常工作。

解决方案

1. 完善环境变量配置

除基础的CC/CXX/LD/AR外,还需指定NDK的sysroot路径及Android API级别,确保编译器能正确找到系统头文件和库:

export NDK_PATH=/home/username/NDK
export SYSROOT=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/sysroot
export CC=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang
export CXX=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android29-clang++
export LD=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-ld
export AR=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
# 传递sysroot和API级别参数
export CFLAGS="--sysroot=$SYSROOT -D__ANDROID_API__=29"
export CXXFLAGS="--sysroot=$SYSROOT -D__ANDROID_API__=29"
export LDFLAGS="--sysroot=$SYSROOT"

2. 调整configure参数

GHC的configure对带API版本的目标三元组(如aarch64-linux-android29)支持不佳,改用标准的aarch64-unknown-linux-android,同时明确指定build/host/target及sysroot:

./configure \
  --build=x86_64-pc-linux-gnu \
  --host=aarch64-unknown-linux-android \
  --target=aarch64-unknown-linux-android \
  --with-sysroot=$SYSROOT \
  --disable-large-address-space \
  --enable-threads

3. 适配GHC的OS检测逻辑(旧版本GHC需执行)

如果使用GHC 9.0及以下版本,需修改GHC源码的平台检测逻辑,让其将Android识别为Linux变种:

  • 编辑configure.ac,找到OS检测的case分支:
    case "$target_os" in
      linux*)
        AC_DEFINE([linux_HOST_OS], [1], [Define if targeting Linux])
        ;;
    
    修改为:
    case "$target_os" in
      linux*|android*)
        AC_DEFINE([linux_HOST_OS], [1], [Define if targeting Linux or Android])
        ;;
    
  • 执行autoreconf重新生成configure脚本:
    autoreconf -i
    

4. 使用Hadrian的交叉编译风味

运行Hadrian时指定quick-cross风味,优化交叉编译流程:

hadrian/build -j --verbose --flavour=quick-cross

额外注意事项

  • 推荐使用GHC 9.2+版本,新版本对Android交叉编译的支持更完善,无需手动修改源码
  • 确保NDK版本与GHC兼容,建议使用NDK 21+ LTS版本

内容的提问来源于stack exchange,提问作者tgvp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:05:33