我刚刚开始使用 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
。
有人有想法吗?预先感谢您。
最好的办法是将
vk_mem_alloc.h
包含在 VulkanBase.h
中,并在 #include "VulkanBase.h"
中的 VulkanBase.cpp
行之前添加 #define VMA_IMPLEMENTATION
:
#include "vk_mem_alloc.h"
// declarations here
#define VMA_IMPLEMENTATION
#include "VulkanBase.h"
// definitions here
这样,VMA 的实现就只有一个,并在
VulkanBase.cpp
中进行编译。然后,您可以将 VulkanBase.h
文件包含在其他 .cpp 和 .h 文件中,这样该文件仅包含 VMA 的声明。希望有帮助。