我在尝试将一些第三方代码集成到我的项目中时遇到了障碍。我正在尝试集成 fontstash,这是一个仅标题的 OpenGL 文本渲染解决方案。( https://github.com/memononen/fontstash ) 作为一个整体,我也在使用 SDL、GLEW、AssImp、Lua 5.3/LuaBridge 和 Bullet Physics。我已将 fontstash 头文件放在我的 vc/include 目录中。编译正常进行,但链接在巨大的墙中惨遭失败......
c_main.obj : error LNK2005: "unsigned int __cdecl glfonsRGBA(unsigned char,unsigned char,unsigned char,unsigned char)" (?glfonsRGBA@@YAIEEEE@Z) already defined...
c_main.obj : error LNK2005: "void __cdecl glfonsDelete(struct FONScontext *)" (?glfonsDelete@@YAXPAUFONScontext@@@Z) already defined in...
...
c_main.obj : error LNK2005: _stbtt_FindMatchingFont already defined in...
c_main.obj : error LNK2005: _stbtt_GetFontNameString already defined...
它似乎只是简单地迭代了通过 fontstash 头文件提供的整个函数列表。我尝试将标题包装在 extern "C" {} 中,但无济于事。我也尝试过包含项目目录中的文件。我不知道为什么会发生这种情况以及从哪里开始弄清楚是什么原因造成的。如主题标题所示,我使用的是 MSVC12/Win7,我正在为 Windows 构建并为 x86 进行编译。
此外,我不止一次地包含这些文件,因为在其他位置使用了使用 fontstash 的相关代码。我认为这是问题所在,但是 fontstash 提供的头文件具有包含保护,所以我不明白为什么会在这方面发生这种情况。