如何在Android Studio中正确找到NDK shaderc库并将其链接到您的项目中?

时间:2018-12-05 11:30:55

标签: android-studio cmake android-ndk linker

我想在我的Android手机上运行 Vulkan ,目前,我陷入了试图让CMake找到libshaderc的问题。

我要做的是首先构建shaderc:

cd <my-ndk-root>/sources/third_party/shaderc
../../../ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk APP_STL:=c++_static APP_ABI=all NDK_TOOLCHAIN_VERSION:=clang libshaderc_combined -j16

在我的CMakeLists.txt中,我有:

get_filename_component(SHADERC_SRC
    ${ANDROID_NDK}/sources/third_party/shaderc
    ABSOLUTE)
add_library(shaderc_lib STATIC IMPORTED)
set_target_properties(shaderc_lib PROPERTIES IMPORTED_LOCATION
    ${SHADERC_SRC}/libs/${ANDROID_STL}/${ANDROID_ABI}/libshaderc.a)

但是CMake找不到shaderc_lib,并因错误而失败:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:

shaderc_lib

请注意,我已经检查过libshaderc.a下有[my-ndk-root]/sources/third_party/shaderc/libs

 .
└── c++_static
    ├── arm64-v8a
    │   └── libshaderc.a
    ├── armeabi-v7a
    │   └── libshaderc.a
    ├── x86
    │   └── libshaderc.a
    └── x86_64
        └── libshaderc.a

5 directories, 4 files

我对CMake和NDK不太熟悉,所以如果我犯了一些愚蠢的错误,请纠正我。预先感谢!

2 个答案:

答案 0 :(得分:0)

确保您的CMake路径指向正确的位置。另外,您的libshaderc.a是静态库,您需要将其链接到共享库,例如libshaderc-shared.so使用以下CMake配置:

target_link_libraries( libshaderc-shared
                   [my-ndk-root]/sources/third_party/shaderc/libs/c++_static/${ANDROID_ABI}/libshaderc.a )

参考:

答案 1 :(得分:0)

我也在忙于学习Vulkan,目前我只能提供vulkan示例帮助。他们在支持vulkan的android设备上工作。我正在使用诺基亚scirocco 8作为测试设备。看一下示例中的CMakeLists.txt,了解如何链接shaderc静态库。 https://github.com/googlesamples/vulkan-basic-samples/