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

交叉编译Halide为Android arm64-v8a静态库时出现链接未定义符号错误

错误根因

你当前的交叉编译配置存在多处缺失,导致构建过程混淆了**宿主系统(macOS x86_64)和目标系统(Android arm64-v8a)**的编译目标:

  • 未指定Android NDK官方交叉编译工具链,CMake没有真正进入Android交叉编译模式,默认仍使用macOS本地编译器构建程序
  • 未关闭Halide默认开启的测试用例构建:测试用例需要在宿主系统运行,但你编译出的Halide库是Android架构,本地x86_64编译器链接不兼容的Android架构库自然会报错
  • CLANG_TABLEGEN参数配置错误,只指定到了目录,没有指向具体的clang-tblgen二进制文件
  • cmake命令存在笔误:-S .-B build缺少空格,应为-S . -B build

修正方案

按照以下步骤调整配置即可:

  1. 提前准备好Android NDK(建议使用r21~r25版本,和你使用的LLVM 12版本兼容性更好),在cmake参数中添加NDK工具链相关配置
  2. 关闭测试、示例程序的构建,避免宿主系统链接目标架构库的冲突
  3. 修正CLANG_TABLEGEN的路径配置

修正后的cmake命令示例(将<你的NDK路径>替换为你本地NDK的实际存放路径,ANDROID_PLATFORM可根据你的最低兼容Android版本调整):

$ cmake -S . -B build \
        -DCMAKE_CROSSCOMPILING=True \
        -DCMAKE_TOOLCHAIN_FILE=<你的NDK路径>/build/cmake/android.toolchain.cmake \
        -DANDROID_ABI=arm64-v8a \
        -DANDROID_PLATFORM=android-21 \
        -DHalide_TARGET=arm-64-android \
        -DHalide_SHARED_LLVM=ON \
        -DBUILD_SHARED_LIBS=OFF \
        -DBUILD_TESTING=OFF \
        -DHalide_BUILD_TESTS=OFF \
        -DHalide_BUILD_APPS=OFF \
        -DLLVM_DIR=/usr/local/Cellar/llvm/12.0.1/lib/cmake/llvm \
        -DClang_DIR=/usr/local/Cellar/llvm/12.0.1/lib/cmake/clang \
        -DLLD_DIR=/usr/local/Cellar/llvm/12.0.1/lib/cmake/lld \
        -DLLVM_TABLEGEN=/usr/local/Cellar/llvm/12.0.1/bin/llvm-tblgen \
        -DCLANG_TABLEGEN=/usr/local/Cellar/llvm/12.0.1/bin/clang-tblgen \
        -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-linux-android \
        -DLLVM_TARGET_ARCH=aarch64 \
        -DLLVM_TARGETS_TO_BUILD=aarch64 \
        -DCMAKE_BUILD_TYPE=Debug

之后再执行cmake --build ./build即可正常完成Android架构静态库的编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:06:03