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)
相关推荐
Mr数据杨38 分钟前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
luj_17681 小时前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
●VON1 小时前
谁小时候不想要一个游戏修改器?我把电脑 Skill 做成了 Android 小助手
android·游戏·电脑
刃神太酷啦1 小时前
Linux 系统 MySQL 完整安装配置教程:从卸载 MariaDB 到优化 my.cnf----《Hello MySQL!》(1)
android·linux·c语言·c++·mysql·leetcode·mariadb
里欧跑得慢1 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
IT毕设实战小研2 小时前
基于安卓的空气质量查询系统
android·大数据·vue.js·爬虫·python·django·课程设计
leonkay2 小时前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
harmful_sheep2 小时前
java group by常见用法
java·开发语言·python
SKH.2 小时前
Linux软件编程(6)线程间通信
java·开发语言·数据库
whcyhhh3 小时前
头歌实践教学平台:数据科学与大数据技术导论(十六)
大数据·开发语言·python