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。
第三步:清理缓存并重新构建
完成上述修改后,先清理之前的构建缓存,再重新执行构建:
- 在项目根目录打开终端,执行:
gradlew clean - 然后执行构建命令:
gradlew assembleDebug
如果还是有问题,建议检查你的NDK和CMake版本是否兼容,尽量使用较新的CMake版本(比如3.18及以上)和对应兼容的NDK版本。
内容的提问来源于stack exchange,提问作者Mujtaba Faizi
相关产品推荐
相关产品推荐

