私は知っています:これはすでに対処されていますが、これについてできる限り読んだ後でも、なぜ修正できなかったのか、何を修正する必要があるのかさえわかりませんでした.
thisによると、プロジェクトで 2 つの異なる標準ランタイム ライブラリを同時にコンパイルに使用すると、問題が発生することがわかります。これらの中で最も一般的なのは、libcmt.libとmsvcrt.libであり、それらに相当するデバッグ用のものもあります。
どうやら、私のプロジェクトはこれらの両方を使用しているため、次の警告が一緒に表示されます。
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>glew32s.lib(glew.obj) : warning LNK4099: PDB 'vc100.pdb' was not found with 'glew32s.lib(glew.obj)' or at 'C:\Programming\VS\Play_VS\Debug\vc100.pdb'; linking object as if no debug info
ご覧のとおり、これには glew を使用しています。コードはエラーなしでコンパイルされますが、使用している外部ライブラリがGLEW/GLFW/GLU/GLMだけであるという事実から、現在のビルドに構成上の問題があるのではないかと考えています。MFC や ATL、その他の Visual C++ ライブラリは、ネイティブの STL 実装以外には使用していません。
最初に、プロジェクトのプロパティを からMulti-Threaded [Debug] DLL
に設定してみましMulti-Threaded [Debug]
たが、次の出力が生成されて事態が悪化しているようです。
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _free already defined in LIBCMTD.lib(dbgfree.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _malloc already defined in LIBCMTD.lib(dbgmalloc.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _fprintf already defined in LIBCMTD.lib(fprintf.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: ___iob_func already defined in LIBCMTD.lib(_file.obj)
1>MSVCRT.lib(MSVCR110.dll) : error LNK2005: _strchr already defined in LIBCMTD.lib(strchr.obj)
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMTD.lib(typinfo.obj)
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMTD.lib(typinfo.obj)
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>C:\Programming\VS\Play_VS\Debug\Play_VS.exe : fatal error LNK1169: one or more multiply defined symbols found
同様に、デバッグ ビルドとリリース ビルドの両方のコンパイル フラグを調べると/MT
、どちらのコマンド生成入力にも (libcmt.lib) が存在しないことがわかります。私の知る限り、Windows でネイティブ C++ アプリケーションを作成するほとんどの人は/MD
、msvcrt.lib
.
デバッグ ビルド入力
/GS /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /Fd"Debug\vc110.pdb" /fp:precise /D "GLEW_STATIC" /D "_CRT_SECURE_NO_WARNINGS" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /GR /Gd /Oy- /MDd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\Play_VS.pch"
リリース ビルド入力
/GS /GL /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /Fd"Release\vc110.pdb" /fp:precise /D "_CRT_SECURE_NO_WARNINGS" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MD /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\Play_VS.pch"
どうすればこれを修正できますか? 助けてくれてありがとう。