Visual Studio 2012で最も簡単な種類の新しいMFCアプリケーションを作成し、MFCに静的にリンクするように設定すると、リンクは失敗します。スタティックにMFCをリンクするときの未修正のVisual Studio 2012 MFCテンプレートのリンクエラー
ウィザードによるプロジェクトの作成からビルダーまでの(リンカーエラーの結果)までのgallery of 7 screenshotsです。 ソース編集が間に合わなかった。
エラー状態をログに記録します。
1>------ Build started: Project: Test, Configuration: Debug Win32 ------
1> stdafx.cpp
1> TestDlg.cpp
1> Test.cpp
1> Generating Code...
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "void __cdecl AfxRegisterMFCCtrlClasses(void)" ([email protected]@YAXXZ) already defined in afxnmcdd.lib(afxctrlcontainer2.obj)
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "protected: void __thiscall CMFCControlContainer::PreUnsubclassControl(class CWnd *)" ([email protected]@@[email protected]@@Z) already defined in afxnmcdd.lib(afxctrlcontainer2.obj)
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "public: int __thiscall CMFCControlContainer::SubclassDlgControls(void)" ([email protected]@@QAEHXZ) already defined in afxnmcdd.lib(afxctrlcontainer2.obj)
1>C:\Users\XXXXXXXX\Documents\Visual Studio 2012\Projects\Test\Debug\Test.exe : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
は、これは私だけですか?これに対処する方法についての提案がありますか?
私が推測する危険があったら、ウィザードが壊れていると言うでしょう。静的なMFCとCRTにリンクしている場合は、[afx.hからの自動マジックセットアップ](http://msdn.microsoft.com/en-us/library/bx5yfk7t.aspx)がこれを処理します。あなたがUnicodeサポートでコンパイルしているとしたら(これはあなただと思いますが、最近誰がいないのですか?)、適切なlibはstatic-unicode-debugの 'uafxcwd.lib'と思われます。 2番目のlibが全く存在しないか、リンカーの順序が間違っていてもかまいません。私はあなたがPCHファイルを吹き飛ばした後にUnicodeをサポートして再構築するなら、何が起こるか知りたいと思うでしょう。 – WhozCraig
私はこれをバグとしてMicrosoftに報告するべきだと思います。私はあなたがVS 2012のヘルプメニューからそうすることができると思います。そして、リンカオプションから 'afxnmcdd.lib'のような偽のライブラリをすべて削除し、' uafxcwd.lib'を追加してください。おそらく '/ NODEFAULTLIBS'を追加してください。 –
@ warren-p私は同意します。私は間違いなくこの問題をたどる頭痛を他人に救うためにそうしています。うまくいけば(?)それは実際のバグであり、私のセットアップに特有のものではありません。 – Paul