В моем файле main.h я #include "skybox.h"
, В skybox.h включен stb_image.h (последняя версия от GitHub от 29-1-2017). В отличие от любой другой библиотеки, с которой я сталкивался, прежде чем включать stb_image.h, документы говорят #define STB_IMAGE_IMPLEMENTATION
, Я попытался поместить это перед включением stb_image.h (в skybox.h), перед включением skybox.h (в main.h), как, так и нет. Ни один из них не работает, компоновщик выводит все дубликаты между build / main.o и build / skybox.o.
ld: 33 повторяющихся символа для архитектуры x86_64
ошибка, указанная при связывании Кроме того, я делаю #define из заголовочного файла stb_image.h, но попытался сделать это из исходного файла, что не помогает.
Я наконец понял, как это исправить. Вместо того, чтобы положить #define STB_IMAGE_IMPLEMENTATION
а также #inlclude stb_image.h
в заголовочном файле вы помещаете их в исходный файл, где бы они ни использовались. Если вы положите #define STB_IMAGE_IMPLEMENTATION
в заголовке он определяется во всех файлах, которые включают этот заголовок, вызывая ошибку повторяющихся символов, так как при определении stb_image переопределяется.
Других решений пока нет …