c – 对vkCreateInstance的未定义引用

最终编辑:这是TDM_GCC的编译器/链接器错误.见答案.

编辑:据我所知,这不是重复.问题似乎是一个简单的noob错误,但事实并非如此.我使用TDM-GCC-64链接到正确的Vulkan库“vulkan-1.lib”,这是用于Windows的GCC / MinGW工具包,并使用了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实例并退出.

我尝试用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

我的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

我究竟做错了什么?我正在联系agaist正确的库,对吗?

这是我的程序代码:

#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

最佳答案 正如我发现的那样(感谢@Gomiero),如果我尝试使用MinGW-w64 x86_64 posix seh rev0进行同样的构建,它将完美运行!似乎TDM-GCC-64以及常规的MinGW都存在“vulkan-1”库的问题.所以,这总结为编译器/链接器错误!

点赞