ПОСЛЕДНЯЯ РЕДАКЦИЯ: это ошибка компилятора/компоновщика с TDM_GCC. Смотрите ответ.
РЕДАКТИРОВАТЬ: Насколько я могу судить, это не дубликат. Проблема кажется простой ошибкой нуба, но это не так. Я связался с правильной библиотекой Vulkan «vulkan-1.lib», используя TDM-GCC-64, который представляет собой набор инструментов GCC/MinGW для Windows, и использовал пример кода из примеров VulkanSDK. Эта страница Как использовать Vulkan с МинГВ? (ошибка R_X86_64_32) также подтверждает, что его можно запустить на MinGW, который не должен отличаться от TDM-GCC-64, поскольку он использует части MinGW. Если это дубликат с простым ответом, то прошу прощения за вопрос, но пока никто не решил эту "простую" задачу.
EDIT2: Вот файлы моего проекта. Просто отредактируйте make-файл, как вам нужно, и запустите "BUILD.bat". http://www.filedropper.com/vulkanapp_1
Я скачал LunarG Vulkan SDK v1.0.3.1 и установил его. У меня есть очень простая программа, которая пытается создать экземпляр Vulkan и завершает работу.
Вывод, который я получаю, когда пытаюсь собрать программу с помощью g++:
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
Мой make-файл выглядит так:
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
\Bin32
тебе 32 или 64? - person iksemyonov   schedule 25.02.2016TDM-GCC-64
(версия gcc 5.1.0 - tdm64-1), и я могу подтвердить, что это не работа! Компоновщик выдал мне сообщение: ошибка добавления символов: файл в неправильном формате дляvulkan-1.lib
. Восстановил инструменты наx86_64-posix-seh-rev0 - MinGW
, и все снова заработало. - person Gomiero   schedule 26.02.2016TDM-GCC-64
(прямо сейчас, когда увидел ваши комментарии), и он не распознал форматvulkan-1.lib
. Не знаю почему, но поскольку у меня также были проблемы сgfortran
TDM для компиляцииlibOpenBlas
, и потребовалось некоторое время, пока я не обнаружил, что это ошибка, я отказался от использования дистрибутива TDM. - person Gomiero   schedule 26.02.2016