2017-01-30 2 views
0

Dans mon fichier main.h, j'ai #include "skybox.h". Dans skybox.h, stb_image.h est inclus (la dernière version de GitHub au 29-1-2017). Contrairement à toute autre bibliothèque que j'ai rencontrée, avant d'inclure stb_image.h, les docs disent #define STB_IMAGE_IMPLEMENTATION. J'ai essayé de mettre ceci avant d'inclure stb_image.h (dans skybox.h), avant d'inclure skybox.h (dans main.h), les deux, et aucun. Aucun d'entre eux ne fonctionne, l'éditeur de liens affiche tous les doublons entre build/main.o et build/skybox.o.Erreur de symboles en double lors de l'inclusion du fichier contenant stb_image.h

ld: 33 symboles en double pour l'architecture x86_64

est l'erreur donnée lors de la liaison. En outre, je fais le #define à partir du fichier d'en-tête stb_image.h, mais j'ai essayé de le faire à partir du fichier source, ce qui ne m'aide pas.

+0

Les notes dans le fichier d'en-tête indiquent de définir cette variable de préprocesseur dans exactement un fichier source pour définir l'implémentation. Est-ce ce que tu as fait? Comment compilez-vous et reliez-vous votre projet? Edit: il semble que vous le fassiez dans un fichier d'en-tête, qui serait inclus dans plusieurs fichiers sources - ce serait votre problème. –

Répondre

0

J'ai enfin trouvé comment y remédier. Plutôt mettre #define STB_IMAGE_IMPLEMENTATION et #inlclude stb_image.h dans le fichier d'en-tête, vous les mettez dans le fichier source où ils sont utilisés. Si vous mettez #define STB_IMAGE_IMPLEMENTATION dans l'en-tête, il est défini dans tous les fichiers qui incluent cet en-tête, entraînant l'erreur des symboles en double quand il est défini, stb_image est réimplémentée.