2017-01-30 7 views
0

내 main.h 파일에서 I #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에), 둘 다 포함하지 않고 none을 포함 시키려고 시도했습니다. 그들 중 누구도 일하지 않으면, 링커는 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가 다시 구현됩니다.