【发布时间】:2017-04-11 14:26:58
【问题描述】:
我有一个 main.cpp,包括 a.h(它有自己的 a.cpp) a.h 包括仅标头库“stbi_image.h”:
#ifndef STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#endif
(https://github.com/nothings/stb)
*.cpp 通过使用#pragma once 包含自己的*.h
但我仍然得到:
LNK1169 发现一个或多个多重定义符号 LNK2005 stb-failure 原因已经在 a.obj 文件中定义 = main.obj ... 和一堆 其他
这对我来说似乎是正确的,但正如我在这个问题中所理解的那样: Multiple definition and header-only libraries
也许我应该在我需要的 stb_image.h 函数中添加内联/静态? 我做错了吗?
提前致谢
【问题讨论】:
-
您是否注意到
stb_image.h顶部附近的文档。据我了解:您应该在a.cpp中包含stb_image.h和pre-#define STB_IMAGE_IMPLEMENTATION和main.cpp(以及其他任何地方)而不包含。 (这可能会允许定义只完成一次,否则您可以获得您现在实际遇到的链接问题。) -
上面的评论对我有用,这应该被接受为答案。
标签: c++ c++11 header inclusion header-only