ошибка «неопределенная ссылка на `vkCreateInstance @ 12′» при компиляции C с использованием Vulkan

#c #mingw #vulkan

#c #mingw #vulkan

Вопрос:

Я пытаюсь изучить C и Vulkan при использовании Windows 10. Я создал небольшую программу, которую дополняю MinGW. Однако при добавлении vkCreateInstance(amp;instanceinfo, nullptr, amp;myvulkaninstance) я получаю сообщение об ошибке:

 c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:Users%USERNAME%AppDataLocalTempccDoOvlg.o:Renderer.cpp:(.text 0x5b): undefined reference to 'vkCreateInstance@12'
collect2.exe: error: ld returned 1 exit status
 

Я получаю указанную выше ошибку в ‘Renderer.cpp ‘в методе ‘InitializeInstance’ (код можно увидеть ниже).

Для компиляции моего проекта я использую эту строку в CMD g -L "C:/VulkanSDK/1.2.154.1/Lib/vulkan-1.lib" main.cpp Renderer.h Renderer.cpp -o build.exe . Я не знаю, правильно ли я собираю библиотеку для Vulkan, поскольку я не смог найти никакой хорошей документации об этом в Интернете.

main.cpp

 #include <iostream>

#include "Renderer.h"

using namespace std;

int main() {

    Renderer renderer;

    return 0;
}
 

Renderer.cpp

 #include <iostream>
#include <cstdlib>

#include "Renderer.h"

// I again don't know if this is the right way to include this header
#include "C:/VulkanSDK/1.2.154.1/Include/vulkan/vulkan.h"

using namespace std;

Renderer::Renderer(){

}

void Renderer::InitializeInstance(){
    VkInstanceCreateInfo instanceCreateInfo {};
    instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;

     // This is the line where i get the error
     auto error = vkCreateInstance(amp;instanceCreateInfo, nullptr, amp;vulkanInstance); // <--

     if(VK_SUCCESS != error){
        std::exit(-1);
     }
}

Renderer::~Renderer(){

}
 

Я некоторое время использовал OpenGL и java (используя LWJGL), но теперь я хотел изучить Vulkan и C . Однако я все еще учусь, поэтому я мало что знаю ни о одной из этих тем. Если вы знаете, как я мог бы улучшить свою компиляцию и / или предотвратить эту ошибку, пожалуйста, дайте мне знать.

Комментарии:

1. Проблема, похоже, в том, как вы связываете библиотеку vulkan.

2. -L является ли папка библиотеки не библиотекой. -l это файл библиотеки.

3. Когда я меняю значение -L на -l , оно выдает мне эту ошибку: c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: cannot find -lC:/VulkanSDK/1.2.154.1/Lib/vulkan-1.lib collect2.exe: error: ld returned 1 exit status

4. Когда я попробовал это, у меня там уже был пробел, однако в журнале ошибок отображается ошибка без пробела.

5. Я думаю, вы можете не -l учитывать . Драйвер компилятора достаточно умен, чтобы определить тот факт, что это библиотека, из расширения файла.