我的Android进阶之旅解决Android Studio 编译NDK项目出错:clang++: error: no such file or directory

Posted 字节卷动

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的Android进阶之旅解决Android Studio 编译NDK项目出错:clang++: error: no such file or directory相关的知识,希望对你有一定的参考价值。

一、错误描述

在编写一个NDK项目的时候,出现编译错误,如下所示:

vlog.basic-opengl | debug | armeabi-v7a Compiler exited with error code 1: 
C:\\android\\SDK\\ndk\\20.0.5594570\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\clang++.exe -xc++ --target=armv7-none-linux-androideabi19 --gcc-
toolchain=C:/Android/SDK/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64 
--sysroot=C:/Android/SDK/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64/sysroot 
-DXtcOpenGL_EXPORTS -ID:/GitLab Source/Vlog_2022/basic-opengl/src/main/cpp/jni
 -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables 
 -fstack-protector-strong -no-canonical-prefixes -fno-addrsig 
 -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -std=c++11 
 -O0 -fno-limit-debug-info -fPIC -fpch-preprocess -v -dD -E Android (5220042 based on r346389c) 
 clang version 8.0.7 (https://android.googlesource.com/toolchain/clang b55f2d4ebfd35bf643d27dbca1bb228957008617) (https://android.googlesource.com/toolchain/llvm 
 3c393fe7a7e13b0fba4ac75a01aa683d7a5b11cd) (based on LLVM 8.0.7svn) 
 Target: armv7-none-linux-android19 Thread model: posix InstalledDir: 
 C:\\Android\\SDK\\ndk\\20.0.5594570\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin Found candidate GCC installation: C:/Android/SDK/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi\\4.9.x Selected GCC installation: 
C:/Android/SDK/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x Candidate multilib: thumb;
@mthumb Candidate multilib: armv7-a;
@march=armv7-a Candidate multilib: armv7-a/thumb;
@march=armv7-a@mthumb Candidate multilib: .; 
Selected multilib: armv7-a/thumb;@march=armv7-a@mthumb clang++: error: no such file or directory: 'Source/Vlog_2022/basic-opengl/src/main/cpp/jni'


然后所有的C++代码全部爆红,如下所示:

二、分析错误

2.1 错误信息

找到最后一行,报错信息如下:

Selected multilib: armv7-a/thumb;@march=armv7-a@mthumb clang++: 
error: no such file or directory: 'Source/Vlog_2022/basic-opengl/src/main/cpp/jni'

提示找不到'Source/Vlog_2022/basic-opengl/src/main/cpp/jni'目录。

2.2 分析CmakeLists.txt

在CmakeLists.txt,我添加了include_directories配置,指定了几个目录,如下所示:

#incLude
include_directories(
        jni
        render
        sample
        sample/filter
        utils
)


看起来是没有任何问题的。应该不是代码的问题,继续分析!

2.3 分析项目路径

项目路径为:D:\\GitLab Source\\Vlog_2022

报错的目录为:D:\\GitLab Source\\Vlog_2022\\basic-opengl\\src\\main\\cpp\\jni

2.4 分析差异

  1. 提示找不到目录地址为:'Source/Vlog_2022/basic-opengl/src/main/cpp/jni'
  2. 报错实际的目录地址为:D:\\GitLab Source\\Vlog_2022\\basic-opengl\\src\\main\\cpp\\jni


尼玛,这是什么鬼!!!

2.5 移动项目

看起来是Android Studio中的CMake出现了问题,导致路径识别出错。

我们将项目迁移到一个新的没有空格的路径下,试一试

  1. 原来项目路径为:D:\\GitLab Source\\Vlog_2022
  2. 迁移后项目路径为:D:\\GitLab\\Vlog_2022

没有空格了!!!
没有空格了!!!
没有空格了!!!

重要的事情说三遍!


然后重新编译,编译正常,如下所示:

代码正常:

编译正常:


尼玛,真的是天坑!!!

2.6 题外话

但是这个问题在我另外一个项目,是不存在这样的bug。


算了,暂时分析不出为啥新项目会抽风,暂时把新项目迁移到没有空格的目录下!

三、总结

在Window环境下,最好目录别带空格,否则会出现诡异的问题,排查很久!!!!!!

以上是关于我的Android进阶之旅解决Android Studio 编译NDK项目出错:clang++: error: no such file or directory的主要内容,如果未能解决你的问题,请参考以下文章

我的OpenGL学习进阶之旅解决Android OpenGL ES 调试工具 GAPID 无法识别Android设备的问题

我的OpenGL学习进阶之旅解决Android OpenGL ES 调试工具 GAPID 无法识别Android设备的问题

我的Android进阶之旅解决Android项目编译报错: Program type already present : com.xxx.xxxx.BuildConfig

我的Android进阶之旅------>android Button上面的英文字符串自己主动大写的问题解决

我的Android进阶之旅解决Android Studio编译报错:Failed to find Build Tools revision 30.0.2

我的Android进阶之旅------>Android编译错误java.util.zip.ZipException: duplicate entry的解决方法