2

在我的 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 中)之前将其放入,两者都没有。它们都不起作用,链接器输出 build/main.o 和 build/skybox.o 之间的所有重复项。

ld:架构 x86_64 的 33 个重复符号

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

4

1 回答 1

2

我终于想出了如何解决它。而是将#define STB_IMAGE_IMPLEMENTATIONand#inlclude stb_image.h放在头文件中,而是将它们放在源文件中,无论它们在哪里使用。如果您放入#define STB_IMAGE_IMPLEMENTATION标头,它将在包含该标头的所有文件中定义,从而导致重复符号错误,因为在定义时, stb_image 会重新实现。

于 2017-02-21T22:08:45.730 回答