Android编译C++代码步骤详解

如果直接上来就cmake...,大概率会报错:

bash 复制代码
CMake Error at /opt/homebrew/share/cmake/Modules/CMakeDetermineSystem.cmake:152 (message):
  Could not find toolchain file: /build/cmake/android.toolchain.cmake
Call Stack (most recent call first):
  CMakeLists.txt:2 (project)

这个时候需要:

bash 复制代码
echo $ANDROID_NDK

然后再:

bash 复制代码
ls ~/Library/Android/sdk/ndk

会看到不同版本的ndk,选择你需要使用的,然后再:

bash 复制代码
export ANDROID_NDK=$HOME/Library/Android/sdk/ndk/27.0.12077973

后面的版本用你所需要的版本。

再验证下是否制定版本成功:

bash 复制代码
ls $ANDROID_NDK/build/cmake/android.toolchain.cmake

生成构建配置指令:

bash 复制代码
cmake -S . -B build-android \
  -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake" \
  -DANDROID_ABI=arm64-v8a \
  -DANDROID_PLATFORM=android-28 \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_SHARED_LIBS=ON \
  \
  -DGGML_OPENMP=OFF \
  -DGGML_LLAMAFILE=OFF \
  -DGGML_OPENSSL=ON \
  -DGGML_NATIVE=OFF \
  \
  -DLLAMA_OPENSSL=ON \
  -DLLAMA_CURL=OFF \
  -DLLAMA_BUILD_TOOLS=OFF \
  -DLLAMA_BUILD_EXAMPLES=OFF \
  -DLLAMA_BUILD_TESTS=OFF \
  -DLLAMA_BUILD_SERVER=OFF \
  \
  -DOPENSSL_USE_STATIC_LIBS=TRUE \
  -DOPENSSL_ROOT_DIR="/Users/yourname/Desktop/openssl-android-arm64-v8a" \
  -DOPENSSL_INCLUDE_DIR="/Users/yourname/Desktop/openssl-android-arm64-v8a/include" \
  -DOPENSSL_CRYPTO_LIBRARY="/Users/yourname/Desktop/openssl-android-arm64-v8a/lib/arm64-v8a/libcrypto.a" \
  -DOPENSSL_SSL_LIBRARY="/Users/yourname/Desktop/openssl-android-arm64-v8a/lib/arm64-v8a/libssl.a"

备注:

bash 复制代码
这句命令是 用 CMake 生成构建目录(configure 阶段) 的标准写法,我们拆开来看就很清楚了

cmake -S . -B build-android

一、整体在干嘛?

告诉 CMake:源码在当前目录,用 build-android 这个目录来生成构建文件(Makefile / Ninja / Xcode 工程等)。

这是 out-of-source build(外部构建),不会把一堆中间文件污染你的源码目录

二、逐个参数解释
cmake

调用 CMake 可执行程序。

-S .

Source(源码目录)

-S 表示 source directory

. 表示 当前目录

也就是:
当前目录里必须有 CMakeLists.txt

等价于老写法:

cmake .

-B build-android

Build(构建目录)

-B 表示 build directory

build-android 是构建输出目录

如果不存在,CMake 会自动创建

生成的内容包括:

CMakeCache.txt

Makefile / build.ninja

各种中间 .o、.a、.so 文件

三、这句命令执行后会发生什么?

执行流程是:

CMake 读取

./CMakeLists.txt


检测:

编译器

平台

依赖库(OpenSSL、zlib 等)

把 构建系统文件 生成到:

./build-android/

注意:
这一步 不会编译代码,只是生成构建配置。

编译阶段:

bash 复制代码
cmake --build build-android -j$(sysctl -n hw.ncpu)
相关推荐
中科三方1 小时前
域名注册后无法解析解决方法:技术故障排查和解决指南
开发语言·github·php
极客先躯2 小时前
高级java每日一道面试题-2025年7月02日-基础篇[LangChain4j]-什么是 AiServices?它是如何简化 LLM 应用开发的?
java·开发语言
rhett. li2 小时前
FreeBSD系统中使用clang/clang++编译Skia源码的方法
c++·ui·用户界面
_风华ts2 小时前
C++函数指针
c++·函数指针
威桑2 小时前
解决 Qt6 程序 在Linux 环境下无法输入中文的问题
linux·c++·qt
浅念-2 小时前
C++ :类和对象(4)
c语言·开发语言·c++·经验分享·笔记·学习·算法
shentuyu木木木(森)3 小时前
栈与队列基础
c++··队列
lly2024063 小时前
Docker 安装 Python
开发语言
道法自然|~3 小时前
BugkuCTF栅栏密码解题记录(原理+C语言实现)
c语言·开发语言