我想创建一个应用程序,可以在各种设备上运行,如果支持Vulkan,则使用Vulkan进行渲染。所以我将目标SDK版本设置为26,将min sdk版本设置为16.有没有办法以这种方式使用Vulkan,或者我必须创建两个不同的应用程序。
当我使用min sdk 16时,我得到了这个,错误信息:
Error:error: linker command failed with exit code 1 (use -v to see invocation)
,别无其他。
但如果我使用minsdk 26进行构建它可以正常工作。
答案 0 :(得分:0)
您无法链接libvulkan.so,因为它在API 26之前不会出现在大多数设备上。因此您需要在运行时手动加载它:
struct VulkanFuncs {
PFN_vkGetInstanceProcAddr GetInstanceProcAddr;
// ...
};
VulkanFuncs vk;
libvulkan = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL);
if (!libvulkan) { /* must be on API < 26 */ }
vk.GetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(libvulkan, "vkGetInstanceProcAddr");
// use vkGetInstanceProcAddr(NULL, ...) to get address of other "global" funcs
// after creating the instance, use vkGetInstanceProcAddr(instance, ...)
// to get address of all other Vulkan funcs