编译带Vulkan的项目出现如下错误:
Build command failed.
Error while executing process F:\Android\sdk\cmake\3.10.2.4988404\bin\ninja.exe with arguments {-C E:\code\android\Sample1_1\app\.cxx\cmake\debug\armeabi-v7a bn-vulkan-lib}
ninja: Entering directory `E:\code\android\Sample1_1\app\.cxx\cmake\debug\armeabi-v7a'
ninja: error: 'F:/Android/sdk/ndk/21.1.6352462/sources/third_party/shaderc/libs/c++_static/armeabi-v7a/libshaderc.a', needed by '../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libbn-vulkan-lib.so', missing and no known rule to make it
转到 <ndk-root>/sources/third_party/shaderc/
并执行以下命令:
..\..\..\ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk APP_ABI=all APP_PLATFORM=android-24 APP_STL=c++_static -j8 clean libshaderc_combined
但是却弹出了如下错误:
Traceback (most recent call last):
File "third_party/spirv-tools/utils/update_build_version.py", line 32, in <module>
import datetime
ImportError: No module named datetime
make: *** [third_party/spirv-tools/Android.mk:322: F:/Android/sdk/ndk/21.1.6352462/sources/third_party/shaderc/obj/local/arm64-v8a/build-version.inc] Error 1
make: *** Waiting for unfinished jobs....
Traceback (most recent call last):
File "third_party/spirv-tools/utils/update_build_version.py", line 32, in <module>
import datetime
ImportError: No module named datetime
make: *** [third_party/spirv-tools/Android.mk:322: F:/Android/sdk/ndk/21.1.6352462/sources/third_party/shaderc/obj/local/x86_64/build-version.inc] Error 1
查询发现:
21.1.6352462 自带的Python版本没有携带datetime包
其中Python位于<NDK_ROOT>\prebuilt\windows-x86_64\lib\python2.7
Github上也找到相应问题的Issue:
[BUG] windows python prebuilt no longer has datetime module, breaking shaderc · Issue #1291 · android/ndk · GitHub
https://github.com/android/ndk/issues/1291
下载最新22.0.7026061版本解决问题。修改local.properties文件,把ndk.dir
目录指向刚刚下好的22版本即可:
ndk.dir=F\:\\Android\\sdk\\ndk\\22.0.7026061
重新编译。最后成功了!