FINAL EDIT: Это ошибка компилятора/компоновщика с TDM_GCC. См. Ответ.Неопределенная ссылка на vkCreateInstance
EDIT: Это не дубликат, насколько я могу судить. Проблема заключается в простой ошибке noob, но это не так. Я связал с правильной библиотекой Vulkan «vulkan-1.lib», используя TDM-GCC-64, который является набором инструментов GCC/MinGW для Windows, и использовал примерный код из примеров VulkanSDK. Эта страница How do I use Vulkan with MinGW? (R_X86_64_32 error) также подтверждает, что она может быть запущена на MinGW, которая не должна отличаться от TDM-GCC-64, поскольку она использует части MinGW. Если это дубликат с простым ответом, то я прошу прощения за вопрос, но пока никто не решил эту «простую» проблему.
EDIT2: Вот мои файлы проекта. Просто отредактируйте файл makefile, но вам нужно и запустите «BUILD.bat». http://www.filedropper.com/vulkanapp_1
Я загрузил LunarG Vulkan SDK v1.0.3.1 и установил его. У меня очень простая программа, которая пытается создать экземпляр Vulkan и выходы.
выход я получаю, когда я пытаюсь построить программу с г ++ является:
C:\VulkanSDK\1.0.3.1\Bin32/vulkan-1.lib: error adding symbols: File in wrong format collect2.exe: error: ld returned 1 exit status
Моя Makefile выглядит следующим образом:
VulkanApp: main.obj g++ -m32 -LC:\VulkanSDK\1.0.3.1\Bin32 main.obj -o VulkanApp.exe -lvulkan-1 main.obj: main.cpp g++ -m32 -IC:\VulkanSDK\1.0.3.1\Include -c main.cpp -o main.obj clean: del *.exe *.obj
Что я делаю Неправильно? Я связываю агаист с правой библиотекой, правильно?
Вот мой код программы:
#include <vulkan/vulkan.h>
//#include <vulkan/vk_sdk_platform.h>
#include <iostream>
#include <cstdlib>
#define APP_SHORT_NAME "VulkanApp"
int main()
{
// 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;
// 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); // <- undefined Reference here
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); // <- undefined reference here
return 0;
}
#endif
Вы уверены, что библиотека в bin была создана для MinGW? (Кажется, вы используете mingw) – SergeyA
'\ Bin32' вы на 32 или 64? – iksemyonov
Я использую 64-битный ПК с Windows 7 64 бит, но я создаю 32-битный исполняемый файл. Я использую MinGW, или, точнее, я использую TDM-GCC-64 , а флаг «-m32» - для 32-битного. Если библиотека не была построена для MinGW, то я думаю, что я дерьмо из-за удачи, потому что это единственное, что у них есть. –
SeanRamey