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

Android环境下CMake编译无法找到头文件目录问题求助

解决Gradle+CMake构建时因路径空格导致的Clang编译错误

嘿,我一眼就看出你这问题的核心了——你的Windows用户名Mujtaba Faizi包含空格,导致CMake在传递路径给Clang时没有正确转义,把完整路径C:\Users\Mujtaba Faizi\AppData\...硬生生截断成了Faizi/AppData/...,自然找不到对应的头文件目录。另外你的CMakeLists.txt还有个明显的小错误,我给你一步步解决:

第一步:修正CMakeLists.txt的错误配置

你当前的include_directories行把.so库文件当成了头文件目录,这完全不对!正确的做法是区分头文件目录、预编译库的引入和链接,修改后的CMakeLists.txt如下:

# Sets the minimum version of CMake required to build your native library.
cmake_minimum_required(VERSION 3.4.1)

# 设置TensorFlow头文件的实际存放目录(替换成你项目中头文件的真实路径)
include_directories(src/main/cpp/include)

# 引入预编译的libtensorflow_inference.so库
add_library(tensorflow_inference SHARED IMPORTED)
set_target_properties(tensorflow_inference PROPERTIES
    IMPORTED_LOCATION src/main/cpp/armeabi-v7a/libtensorflow_inference.so
)

# 构建你的native-lib库
add_library(
    native-lib
    SHARED
    src/main/cpp/native-lib.cpp
)

# 将native-lib与tensorflow库链接,log库是Android日志库,按需添加
target_link_libraries(
    native-lib
    tensorflow_inference
    log
)

第二步:解决带空格的用户目录问题

因为你的用户名包含空格,CMake调用Clang时路径解析会出问题,这里给你两种靠谱的解决方法:

方法A:在Gradle中指定无空格的构建临时目录

在app模块的build.gradle文件里,修改externalNativeBuild配置,把CMake的构建临时目录指定到一个没有空格的路径,比如项目根目录下的cmake-build:

android {
    // ...其他原有配置
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
            buildStagingDirectory "${project.rootDir}/cmake-build"
        }
    }
}

方法B:使用Windows短路径(备选方案)

Windows会给带空格的路径生成8.3格式的短路径(比如Mujtaba Faizi会被系统识别为MUJTAB~1),你可以在配置中手动替换成短路径,但这种方法不够灵活,优先推荐方法A。

第三步:清理缓存并重新构建

完成上述修改后,先清理之前的构建缓存,再重新执行构建:

  1. 在项目根目录打开终端,执行:gradlew clean
  2. 然后执行构建命令:gradlew assembleDebug

如果还是有问题,建议检查你的NDK和CMake版本是否兼容,尽量使用较新的CMake版本(比如3.18及以上)和对应兼容的NDK版本。

内容的提问来源于stack exchange,提问作者Mujtaba Faizi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:34:52