Не удалось выполнить команду компоновщика Android Vulkan - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь использовать Vulkan на Android, поэтому я установил Android ndk.Я видел, что в Android Studio по умолчанию родной C ++, Vulkan включен.Но всякий раз, когда я строю, я получаю следующую ошибку:

C: /Users/a18/AndroidStudioProjects/vulkanSMD/app/src/main/cpp/native-lib.cpp: 34: ошибка: неопределенная ссылкав vkCreateInstance clang ++: ошибка: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

Я пробовал включить libvulkan.so, а также пробовал dlopen("libvulkan.so", flags), но этобесполезноЯ пытаюсь заставить Вулкана работать на Android.Приведенный ниже код создает экземпляр vulkan.

#include <jni.h>
#include <string>
#include <vector>
#define VK_USE_PLATFORM_ANDROID_KHR 1
#include <vulkan/vulkan.h>

std::vector<const char *>extensions;
std::vector<const char *>layers;

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_vulkansmd_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {

    extensions = std::vector<const char *>({
                                                   "VK_EXT_debug_report",
                                                   "VK_KHR_surface",
                                           });
    layers = std::vector<const char *>({"VK_LAYER_LUNARG_standard_validation"});
    VkInstanceCreateInfo createInfo = {};
    VkApplicationInfo appInfo = {};
    appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
    appInfo.pApplicationName = "Vulkan is hard";
    appInfo.applicationVersion = VK_VERSION_1_0;
    appInfo.engineVersion = VK_VERSION_1_0;
    appInfo.apiVersion = VK_VERSION_1_0 ;
    createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
    createInfo.pApplicationInfo = &appInfo;
    createInfo.ppEnabledExtensionNames = extensions.data();
    createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
    createInfo.ppEnabledLayerNames = layers.data();
    createInfo.enabledLayerCount = static_cast<uint32_t>(layers.size());
    VkInstance  instance;
    vkCreateInstance(&createInfo, nullptr, &instance);

    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

При сборке, однако, я получаю следующую ошибку

Сбой команды построения.Ошибка при выполнении процесса C: \ Users \ a18 \ AppData \ Local \ Android \ Sdk \ cmake \ 3.10.2.4988404 \ bin \ cmake.exe с аргументами {--build C: \ Users \ a18 \ AndroidStudioProjects \ vulkanSMD \ app.externalNativeBuild\ cmake \ debug \ x86_64 --target native-lib} [1/2] Создание объекта CXX CMakeFiles / native-lib.dir / native-lib.cpp.o [2/2] Связывание общей библиотеки CXX C: \ Users \a18 \ AndroidStudioProjects \ vulkanSMD \ app \ build \ промежуточные \ cmake \ debug \ obj \ x86_64 \ libnative-lib.so СБОЙ: C: / Users / a18 / AndroidStudioProjects / vulkanSMD / app / build / посредники / cmake / debug / obj /x86_64 / libnative-lib.so cmd.exe / C "cd. && C: \ Users \ a18 \ AppData \ Local \ Android \ Sdk \ ndk-bundle \ toolchains \ llvm \ prebuilt \ windows-x86_64 \ bin \ clang ++. exe--target = x86_64-none-linux-android26 --gcc-toolchain = C: / Users / a18 / AppData / Local / Android / Sdk / ndk-bundle / toolchains / llvm / предварительно встроенный / windows-x86_64 --sysroot = C: / Users / a18 / AppData / Local / Android / Sdk / ndk-bundle / toolchains / llvm / prebuilt / windows-x86_64 / sysroot -fPIC -g -DANDROID -fdata-section -ffunction-section -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -Wa, - noexecstack -Wformat -Werror = формат-безопасность -O0 -fno-limit-debug-info -Wl, - exclude-libs, libgcc.a -Wl, - exclude-libs, libatomic.a -static-libstdc ++ -Wl, - build-id -Wl, - warn-shared-textrel -Wl, - fatal-warnings -Wl,--no-undefined -Qunused-arguments -Wl, -z, noexecstack -shared -Wl, -soname, libnative-lib.so -o C: \ Users \ a18 \ AndroidStudioProjects \ vulkanSMD \ app \ build \ промежуточные файлы \ cmake \debug \ obj \ x86_64 \ libnative-lib.so CMakeFiles / native-lib.dir / native-lib.cpp.o -llog -latomic -lm && cd. "C: /Users/a18/AndroidStudioProjects/vulkanSMD/app/src/main/cpp/native-lib.cpp: 34: ошибка: неопределенная ссылка на клан «vkCreateInstance» ++: ошибка: сбой команды компоновщика с кодом выхода 1 (используйте -vчтобы увидеть вызов) ниндзя: сборка остановлена: подкоманда не выполнена.

...