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 天前
Java从零到熟练(四):面向对象基础
java·开发语言
Unbelievabletobe1 天前
解决了股票api接口盘后数据更新慢的问题
大数据·开发语言·python
cany10001 天前
C++ -- 可变参数模板
c++
程序员陆业聪1 天前
绕过Frida/Xposed的最后防线:SVC直接系统调用与Native反Hook实战
android
程序员陆业聪1 天前
WebView与原生JS交互:JSBridge生产级实现与安全防护
android
不会C语言的男孩1 天前
C++ Primer 第2章:变量和基本类型
开发语言·c++
在繁华处1 天前
Java从零到熟练(三):流程控制
java·开发语言·python
云泽8081 天前
C++ 可调用对象通关指南:深度解析 Lambda 表达式、function 包装器与 bind 绑定器
开发语言·c++·算法
Tri_Function1 天前
简单图论大学习
c++
lqqjuly1 天前
C++ 完整知识体系—从基础语法到现代 C++23 的系统性总结
c++·c++23