2017-01-30 380 views
0

在我的main.h文件中,I #include "skybox.h"。在skybox.h中,包含了stb_image.h(从29-1-2017开始,GitHub的最新版本)。与我遇到的任何其他库不同,在包含stb_image.h之前,文档会告诉#define STB_IMAGE_IMPLEMENTATION。在包含skybox.h(在main.h中)之前,我曾尝试过在包含stb_image.h(在skybox.h中)之前加入这个,并且都没有。它们都不工作,链接器输出build/main.o和build/skybox.o之间的所有重复项。包含stb_image.h文件时出现重复符号错误

LD:用于建筑x86_64的

33点重复的符号是在连接时给定的误差。另外,我正在从头文件stb_image.h中执行#define,但已尝试从源文件中执行该操作,但这没有帮助。

+0

头文件中的注释说,要在一个源文件中定义该预处理器变量来定义实现。那是你做的?你如何编译和链接你的项目?编辑:这听起来像你在一个头文件,这将包括在多个源文件 - 这将是你的问题。 –

回答

0

我终于想出了如何解决它。取而代之的是将#define STB_IMAGE_IMPLEMENTATION#inlclude stb_image.h放在头文件中,然后将它们放在源文件中,无论它们在哪里使用。如果将#define STB_IMAGE_IMPLEMENTATION放在标题中,则会在包含该标题的所有文件中定义它,导致重复的符号错误与定义时一样,stb_image被重新实现。

相关问题