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

如何编写CMakeLists.txt适配NDK独立工具链与OLLVM生成ARM可执行文件

解决CMake编译Android ARM可执行文件却生成x86-64的问题

我来帮你排查这个问题——你遇到的核心问题是CMake没有正确识别你配置的ARM独立工具链,反而 fallback 到了主机的x86-64编译器。下面是一步步的修正方案:

1. 先确认独立工具链的有效性

首先要确保你创建的独立工具链确实是针对ARM架构的:

  • 回忆你创建工具链的命令,正确的ARM(armeabi-v7a)工具链创建命令应该是这样的(替换$NDK为你的NDK路径,api根据你的目标Android版本调整):
    $NDK/build/tools/make_standalone_toolchain.py --arch arm --api 21 --install-dir ./standalone-toolchain
    
  • 检查工具链的bin目录,里面应该存在arm-linux-androideabi-gcc、arm-linux-androideabi-g++这类带ARM前缀的编译器,而不是x86相关的可执行文件。

2. 修正CMake命令行参数

你的原命令存在几个关键参数错误,导致CMake没正确切换到ARM目标:

  • 废弃的参数:-DOS=ANDROID不是CMake Android工具链的标准参数,应该用-DCMAKE_SYSTEM_NAME=Android
  • ABI选择:armeabi已经被NDK废弃(r17及以后不再支持),建议改用armeabi-v7a;如果必须用armeabi,确保你的NDK版本低于r17
  • 工具链路径:ANDROID_STANDALONE_TOOLCHAIN建议使用绝对路径,避免CMake解析路径出错
  • 强制指定编译器:明确指定C/C++编译器路径,防止CMake使用主机的x86-64编译器

修正后的完整CMake命令如下(替换/path/to/your/standalone-toolchain为你的工具链绝对路径):

cmake \
  -DCMAKE_SYSTEM_NAME=Android \
  -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a \
  -DCMAKE_ANDROID_STANDALONE_TOOLCHAIN=/path/to/your/standalone-toolchain \
  -DCMAKE_C_COMPILER=/path/to/your/standalone-toolchain/bin/arm-linux-androideabi-gcc \
  -DCMAKE_CXX_COMPILER=/path/to/your/standalone-toolchain/bin/arm-linux-androideabi-g++ \
  -DCMAKE_BUILD_TYPE=Release \
  .
make -j8

3. 优化你的CMakeLists.txt(可选但更严谨)

可以给你的CMakeLists.txt加上基础配置,避免潜在问题:

cmake_minimum_required(VERSION 3.10) # 匹配你的CMake版本,建议至少3.10以上
project(test C)
set(CMAKE_C_STANDARD 11)

# 如果你的OLLVM需要混淆编译选项,在这里添加
target_compile_options(test PRIVATE -march=armv7-a -O3 -fla -sub -bcf)

add_executable(test test.c)

4. 验证编译结果

编译完成后,用file命令检查生成的可执行文件:

file test

正常的ARM可执行文件输出应该类似:

test: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, BuildID[sha1]=xxx, not stripped

如果输出里出现x86-64,请回头检查工具链路径是否正确,以及CMake命令参数是否写错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:03:34