使用 AMD 的 Vulkan 内存分配器时出现链接器错误 (LNK2005)

问题描述 投票:0回答:1

我刚刚开始使用 AMD 的 VMA,方法是将

vk_mem_alloc.h
包含在我的头文件中,并在其前面添加
#define VMA_IMPLEMENTATION
。但是当我构建项目时,出现了很多
LNK2005
错误。

我的文件结构是这样的

VulkanBase
( .h + .cpp ) -(基类)->
ExApp
(.cpp)

我已经在

VulkanBase.h
文件中声明了这个库。这些错误就像
vk_mem_alloc.h
中的所有成员都已在
ExApp.cpp
中定义。在错误列表的最后,显示了
one or more multiply defined symbols found

有人有想法吗?预先感谢您。

c++ linker visual-studio-2017 vulkan
1个回答
4
投票

最好的办法是将

vk_mem_alloc.h
包含在
VulkanBase.h
中,并在
#include "VulkanBase.h"
中的
VulkanBase.cpp
行之前添加
#define VMA_IMPLEMENTATION
:

VulkanBase.h


#include "vk_mem_alloc.h"

// declarations here

VulkanBase.cpp


#define VMA_IMPLEMENTATION
#include "VulkanBase.h"

// definitions here

这样,VMA 的实现就只有一个,并在

VulkanBase.cpp
中进行编译。然后,您可以将
VulkanBase.h
文件包含在其他 .cpp 和 .h 文件中,这样该文件仅包含 VMA 的声明。希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.