vulkan vkresult 链接器错误 msvc
vulkan vkresult linker error msvc
我正在尝试编译包含在 vulkan 中的第一个示例程序,所以我将它粘贴到 vs17 rc 中的一个新的 win32 项目中。它在 Samples 目录中被称为 01-init_instance。我正在编译 x86.
#include <iostream>
#include <cstdlib>
#include <util_init.hpp>
#define APP_SHORT_NAME "vulkansamples_instance"
int main(int argc, char *argv[]) {
struct sample_info info = {};
init_global_layer_properties(info);
/* VULKAN_KEY_START */
// initialize the VkApplicationInfo structure
VkApplicationInfo app_info = {};
app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
app_info.pNext = NULL;
app_info.pApplicationName = APP_SHORT_NAME;
app_info.applicationVersion = 1;
app_info.pEngineName = APP_SHORT_NAME;
app_info.engineVersion = 1;
app_info.apiVersion = VK_API_VERSION_1_0;
// initialize the VkInstanceCreateInfo structure
VkInstanceCreateInfo inst_info = {};
inst_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
inst_info.pNext = NULL;
inst_info.flags = 0;
inst_info.pApplicationInfo = &app_info;
inst_info.enabledExtensionCount = 0;
inst_info.ppEnabledExtensionNames = NULL;
inst_info.enabledLayerCount = 0;
inst_info.ppEnabledLayerNames = NULL;
VkInstance inst;
VkResult res;
res = vkCreateInstance(&inst_info, NULL, &inst);
if (res == VK_ERROR_INCOMPATIBLE_DRIVER) {
std::cout << "cannot find a compatible Vulkan ICD\n";
exit(-1);
}
else if (res) {
std::cout << "unknown error\n";
exit(-1);
}
vkDestroyInstance(inst, NULL);
/* VULKAN_KEY_END */
return 0;
}
我完成了如下项目属性:
我犯了这个错误,并收到 vkCreateInstance 的链接器错误(在依赖项中添加 .lib 之前),现在我收到一个单独的、不同的链接器错误,因为找不到 vkResult。这让我感到困惑,因为我不知道它如何解析 vkcreate 而不是 vkresult。我使用了所有的字符集设置(多字节,而不是正常的 unicode)但没有改变任何东西。
错误是:
Error LNK2019 unresolved external symbol "enum VkResult __cdecl init_global_layer_properties(struct sample_info &)" (?init_global_layer_properties@@YA?AW4VkResult@@AAUsample_info@@@Z) referenced in function _main vktest C:\Users\user\Documents\Visual Studio 2017\Projects\vktest\vktest\Source.obj 1
Vulkan SDK 附带的示例将 utils
文件夹编译成静态库,并 link 使用该库。这是 init_global_layer_properties
函数存在的地方。如果您不 link 您的示例也使用该库,您将得到未解析的符号。
我正在尝试编译包含在 vulkan 中的第一个示例程序,所以我将它粘贴到 vs17 rc 中的一个新的 win32 项目中。它在 Samples 目录中被称为 01-init_instance。我正在编译 x86.
#include <iostream>
#include <cstdlib>
#include <util_init.hpp>
#define APP_SHORT_NAME "vulkansamples_instance"
int main(int argc, char *argv[]) {
struct sample_info info = {};
init_global_layer_properties(info);
/* VULKAN_KEY_START */
// initialize the VkApplicationInfo structure
VkApplicationInfo app_info = {};
app_info.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
app_info.pNext = NULL;
app_info.pApplicationName = APP_SHORT_NAME;
app_info.applicationVersion = 1;
app_info.pEngineName = APP_SHORT_NAME;
app_info.engineVersion = 1;
app_info.apiVersion = VK_API_VERSION_1_0;
// initialize the VkInstanceCreateInfo structure
VkInstanceCreateInfo inst_info = {};
inst_info.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
inst_info.pNext = NULL;
inst_info.flags = 0;
inst_info.pApplicationInfo = &app_info;
inst_info.enabledExtensionCount = 0;
inst_info.ppEnabledExtensionNames = NULL;
inst_info.enabledLayerCount = 0;
inst_info.ppEnabledLayerNames = NULL;
VkInstance inst;
VkResult res;
res = vkCreateInstance(&inst_info, NULL, &inst);
if (res == VK_ERROR_INCOMPATIBLE_DRIVER) {
std::cout << "cannot find a compatible Vulkan ICD\n";
exit(-1);
}
else if (res) {
std::cout << "unknown error\n";
exit(-1);
}
vkDestroyInstance(inst, NULL);
/* VULKAN_KEY_END */
return 0;
}
我完成了如下项目属性:
我犯了这个错误,并收到 vkCreateInstance 的链接器错误(在依赖项中添加 .lib 之前),现在我收到一个单独的、不同的链接器错误,因为找不到 vkResult。这让我感到困惑,因为我不知道它如何解析 vkcreate 而不是 vkresult。我使用了所有的字符集设置(多字节,而不是正常的 unicode)但没有改变任何东西。
错误是:
Error LNK2019 unresolved external symbol "enum VkResult __cdecl init_global_layer_properties(struct sample_info &)" (?init_global_layer_properties@@YA?AW4VkResult@@AAUsample_info@@@Z) referenced in function _main vktest C:\Users\user\Documents\Visual Studio 2017\Projects\vktest\vktest\Source.obj 1
Vulkan SDK 附带的示例将 utils
文件夹编译成静态库,并 link 使用该库。这是 init_global_layer_properties
函数存在的地方。如果您不 link 您的示例也使用该库,您将得到未解析的符号。