2017-02-16 16 views
1

Я пытаюсь скомпилировать первую примерную программу, включенную в vulkan, поэтому я вставлял ее в новый проект win32 в vs17 rc. Он называется 01-init_instance в директории Samples. Я компилирую x86.vulkan vkresult linker error msvc

#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; 
} 

Я сделал свойства проекта, как:

enter image description here enter image description here enter image description here

я это неправильно и получаю ошибки компоновщика для vkCreateInstance не разрешен (перед добавлением .lib в зависимости) теперь я получаю одну, другую, ошибку компоновщика, не обнаруживая vkResult. Это меня смущает, потому что я не знаю, как это может разрешить vkcreate, но не vkresult. Я использовал все настройки charset (многобайтные, а не unicode как обычно), но это ничего не меняло.

Ошибка:

Ошибка LNK2019 неразрешенный внешний символ "перечисление VkResult __cdecl init_global_layer_properties (структура sample_info &)" (init_global_layer_properties @@ Ю.А. AW4VkResult @@ AAUsample_info @@@ Z?) Ссылки в функции _MAIN vktest C: \ Users \ пользователь \ Documents \ Visual Studio 2017 \ Projects \ vktest \ vktest \ Source.obj 1

ответ

2

образцы, которые приходят с Vulkan SDK скомпилировать папку utils в статическую библиотеку, и ссылку с это библиотека. Здесь существует функция init_global_layer_properties. Если вы не свяжете свой образец с этой библиотекой, вы получите неразрешенные символы.

+0

Что мне делать, чтобы устранить необходимость в этом? –

+0

Удалите '#include ' и использование чего-либо внутри него (например, 'init_global_layer_properties') из вашего кода. – MuertoExcobito