プロジェクトにサードパーティのコードを統合しようとして、障害にぶつかりました。ヘッダーのみの OpenGL テキスト レンダリング ソリューションである fontstash を統合しようとしています。( 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 から提供されたヘッダー ファイルにはインクルージョン ガードがあるため、その点でなぜこれが発生するのかわかりません。