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)
相关推荐
noipp39 分钟前
推荐题目:洛谷 P13554 【MX-X15-T1】奶龙龙
c语言·数据结构·c++·算法·编程·洛谷
geovindu1 小时前
go: Enumeration Algorithm
开发语言·后端·算法·golang·枚举算法
zhangphil2 小时前
Android RecyclerView图像类ViewHolder离屏缓存数量直接增加Java/View对象内存,间接增加Graphics/GL内存
android
库玛西2 小时前
深入剖析 Linux 线程机制与分页式存储管理
linux·服务器·c++·笔记
气概2 小时前
QT集成basler相机
开发语言·数码相机·qt
苦瓜汤补钙2 小时前
Oracle JDK8 环境配置-Win11
开发语言·数据库·笔记·oracle
overmind2 小时前
oeasy Python 102 集合_运算_交集_并集_差集_对称差集
开发语言·python
众少成多积小致巨2 小时前
Android C++ 编码规范指南
android·c++·google
研☆香2 小时前
JavaScript 绘制简单不规则图形:三角形与五角星实战教程
开发语言·javascript·ecmascript
Yyyyyy~2 小时前
【C++】字符串
c++