#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
учитывать . Драйвер компилятора достаточно умен, чтобы определить тот факт, что это библиотека, из расширения файла.