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)
相关推荐
zhangfeng113344 分钟前
openclaw skills 小龙虾技能 通讯仿真 matlab skill Simulink Agentic Toolkit,通过kimi找到,mcp通讯
开发语言·matlab·openclaw·通讯仿真
chao1898447 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
赏金术士7 小时前
Kotlin 习题集 · 高级篇
android·开发语言·kotlin
楼兰公子8 小时前
buildroot 在编译rust时裁剪平台类型数量的方法
开发语言·后端·rust
知识领航员9 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
吴声子夜歌9 小时前
Go——并发编程
开发语言·后端·golang
ooseabiscuit9 小时前
Laravel4.x:现代PHP框架的奠基之作
java·开发语言·php
问心无愧051310 小时前
ctf show web 入门42
android·前端·android studio
c1s2d3n4cs10 小时前
Qt模仿nlohmann::json进行序列化和反序列化
开发语言·qt·json
没什么本事10 小时前
关于C# panel 添加lable问题 -- 明确X和Y 位置错误
android·java·c#