You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rust编译Android SO库报错:找不到android/log.h文件

解决Rust编译Android SO库时android/log.h找不到的错误

错误原因

bindgen生成C语言绑定的过程中,Clang无法定位到Android NDK提供的系统头文件android/log.h,核心原因是未正确配置NDK的sysroot路径。

解决方案

方法1:通过环境变量指定sysroot

在执行编译命令前,新增BINDGEN_EXTRA_CLANG_ARGS环境变量,明确指向NDK的sysroot目录:

export ANDROID_NDK=/home/adrian/code/leaf/android-ndk-r26b
export CC=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android34-clang
export AR=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar
# 配置sysroot路径
export BINDGEN_EXTRA_CLANG_ARGS="--sysroot=${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/sysroot"
cargo build -p leaf-ffi --target x86_64-linux-android --release

方法2:在build.rs中显式配置bindgen

修改项目的leaf/build.rs文件,在bindgen构建逻辑中添加Clang的sysroot参数:

use bindgen;
use std::env;

fn main() {
    let android_ndk = env::var("ANDROID_NDK").expect("ANDROID_NDK环境变量未设置");
    let sysroot_path = format!("{}/toolchains/llvm/prebuilt/linux-x86_64/sysroot", android_ndk);

    let bindings = bindgen::Builder::default()
        .header("src/mobile/wrapper.h")
        // 传入sysroot参数
        .clang_arg(format!("--sysroot={}", sysroot_path))
        .generate()
        .expect("无法生成绑定");

    // 后续绑定文件生成逻辑...
}

额外验证点

  • 确认${ANDROID_NDK}/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/android/log.h文件实际存在
  • 目标API等级(34)需在NDK支持范围内,r26b支持API 21及以上,当前配置符合要求

内容的提问来源于stack exchange,提问作者Fibonacci Leonardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:05:12