包含包含 stb_image.h 的文件时出现重复符号错误

Duplicate symbols error when including file that includes stb_image.h

在我的 main.h 文件中,我 #include "skybox.h"。在 skybox.h 中,包含了 stb_image.h(来自 GitHub 的最新版本,截至 2017 年 1 月 29 日)。与我遇到的任何其他库不同,在包含 stb_image.h 之前,文档对 #define STB_IMAGE_IMPLEMENTATION 说。我试过在包含 stb_image.h(在 skybox.h 中)之前,在包含 skybox.h(在 main.h 中)之前,以及 none 中放置它。 None 其中有效,链接器输出 build/main.o 和 build/skybox.o 之间的所有重复项。

ld: 33 duplicate symbols for architecture x86_64

是链接时给出的错误。此外,我正在从头文件 stb_image.h 中执行 #define,但已尝试从源文件中执行,但没有帮助。

我终于想出了解决办法。而不是将 #define STB_IMAGE_IMPLEMENTATION#inlclude stb_image.h 放在 header 文件中,而是将它们放在使用它们的源文件中。如果你把 #define STB_IMAGE_IMPLEMENTATION 放在 header 中,它会在包含 header 的所有文件中定义,导致重复符号错误,因为它被定义时,stb_image 被重新实现.