Android Studio NDK构建失败(提示缺失C编译器)求助
解决Android Studio NDK构建因用户名含空格失败的问题
这个坑我踩过好几次了!核心问题就是你的用户名Julius Debus里有空格,CMake在解析路径时把空格当成了参数分隔符,直接截断了路径——所以它才会去找Debus/AppData/...,而不是完整的Julius Debus/AppData/...目录,自然找不到NDK的头文件,clang编译测试程序也跟着失败了。
给你三个最实用的解决方案,按操作复杂度排序:
方案一:迁移NDK到不含空格的路径(最推荐)
这是一劳永逸的办法,彻底避开路径空格的问题:
- 先关闭Android Studio,找到当前NDK的默认安装目录:
C:\Users\Julius Debus\AppData\Local\Android\Sdk\ndk-bundle - 把整个
ndk-bundle文件夹复制到一个没有空格的路径,比如C:\Android\Sdk\ndk-bundle或者D:\AndroidNDK - 重新打开Android Studio,进入
File > Settings > Appearance & Behavior > System Settings > Android SDK,切换到SDK Location标签 - 在
NDK location一栏,点击文件夹图标,选择你刚才迁移到的新路径,点击OK保存 - 清理项目(
Build > Clean Project)后重新构建,应该就能正常编译了
方案二:在CMake配置中强制包裹含空格的路径
如果不想移动NDK,也可以修改CMake的参数,让它正确识别带空格的路径:
- 打开项目Module级别的
build.gradle文件,找到externalNativeBuild下的cmake配置块,添加带双引号的NDK路径参数:
android { defaultConfig { // 其他原有配置... externalNativeBuild { cmake { // 用双引号包裹完整的NDK路径,避免空格被解析成分隔符 arguments "-DANDROID_NDK=\"C:/Users/Julius Debus/AppData/Local/Android/Sdk/ndk-bundle\"", "-DCMAKE_SYSROOT=\"${ANDROID_NDK}/sysroot\"" // 如果你指定了ABI,也可以保留原有参数 abiFilters 'armeabi-v7a', 'arm64-v8a' } } } // 其他原有配置... }
- 或者直接修改项目根目录的
CMakeLists.txt,在设置sysroot和头文件路径时用双引号包裹:
# 确保NDK路径被正确解析 set(ANDROID_NDK "C:/Users/Julius Debus/AppData/Local/Android/Sdk/ndk-bundle") set(CMAKE_SYSROOT "${ANDROID_NDK}/sysroot") # 包含头文件时同样用双引号 include_directories("${ANDROID_NDK}/sysroot/usr/include/arm-linux-androideabi")
修改后同步项目(File > Sync Project with Gradle Files),再重新构建即可。
方案三:临时修改构建命令(应急用)
如果只是临时测试,可以在Android Studio的构建配置里给CMake添加参数:
- 进入
Run > Edit Configurations,找到你的Android App配置 - 在
Build标签下的CMake options里,添加:
-DANDROID_NDK="C:/Users/Julius Debus/AppData/Local/Android/Sdk/ndk-bundle"
- 点击
Apply后运行构建,这个方法只对当前配置生效,适合临时调试。
另外提醒一句:以后安装开发工具时,尽量选择不含空格、中文的路径,能避开很多类似的路径解析问题哦~
内容的提问来源于stack exchange,提问作者Julius Debus
相关产品推荐
相关产品推荐

