2017-01-30 63 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被重新實現。

相關問題