2011-07-28 51 views
1

昨日、2005年からVisual Studio 2008にアップグレードしました。まあ、私はいくつかの新しいクラス(特にCFrameWndEx)を利用しようとしており、エラーが出ています。 CFrameWndEx子クラスを宣言してからafxcmdiframewndex.hをstdafx.hに追加すると、私には1つのエラーしか表示されません。一見無害な人。私はちょうど "COleDropTarget基本クラス未定"というエラーを取得します。 OK、簡単な修正、私のインクルードにafxole.hを追加してください。しかし、私がそれをした後は、すべての地獄が緩んだときです。出力のすべてがリンクするまでは良いです:Visual Studio 2008でリンクエラーが発生する

1>LIBCMT.lib(sprintf.obj) : error LNK2005: _sprintf already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(tidtable.obj) : error LNK2005: __decode_pointer already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(setlocal.obj) : error LNK2005: __configthreadlocale already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(strftime.obj) : error LNK2005: _strftime already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a already defined in msvcrtd.lib(cinitexe.obj) 
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in msvcrtd.lib(cinitexe.obj) 
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in msvcrtd.lib(cinitexe.obj) 
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in msvcrtd.lib(cinitexe.obj) 
1>LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" ([email protected]@YAXXZ) already defined in msvcrtd.lib(MSVCR90D.dll) 
1>LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type already defined in msvcrtd.lib(MSVCR90D.dll) 
1>msvcrtd.lib(MSVCR90D.dll) : error LNK2005: __setmbcp already defined in LIBCMT.lib(mbctype.obj) 
1>LINK : warning LNK4098: defaultlib 'msvcrtd.lib' conflicts with use of other libs; use /NODEFAULTLIB:library 
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library 

と使用/ NODEFAULTLIBはMSVCRTD.LIBを取り除くためにとLIBCMTはちょうどより多くの問題の全体の混乱の負荷を引き起こしました。私はこれを修正する一つの方法は、ライブラリがmsvcrtd.libとLIBCMTと競合するのを見つけることだと仮定しますが、どうやってこれをやりますか?

誰もこの問題を以前に見たことがありますか? Microsoftのコードと矛盾しているようですが、それが自分のコードになる可能性があります。どんな助けでも大歓迎です。

ありがとうございます。

+0

投稿に誤字はありますか? CFrameWndExのヘッダーファイルは、[afxframewndex.h](http://msdn.microsoft.com/en-us/library/bb983252(v = VS.90).aspx)ではなくafxcmdiframewndex.hです。 –

答えて

0

問題は、msvcrtd.libがLIBCMT.libと競合していることです。両方を使うべきではありません。 msvcrtd.libライブラリは、マルチスレッド動的リンクデバッグ実行時(/ MDd)のコンパイル時に使用され、LIBCMTはマルチスレッド静的リンク非デバッグ実行時(/ MT)のコンパイル時に使用されます。いくつかの背景についてはhereを参照してください。

スイッチが指定されていない場合、LIBCMTがデフォルトとして使用されます。

"構成プロパティ"をチェックする価値はありますか? C/C++ | "コード生成" |リリースビルドの場合は/ MD、デバッグビルドの場合は/ MDdに設定されていることを確認するために、 "ランタイムライブラリ"の設定を行います。個々のファイルが異なる設定を持つことができるので、プロジェクトの設定とプロジェクトのすべてのcppファイルをチェックする必要があります。

スイッチの設定が間違っていた場合は、afxole.hをインクルードする前であっても問題が発生すると予想していましたが、afxver.hが/ MDスイッチを使用すると、間違ったスイッチ設定よりも微妙な問題になる可能性があります。

を更新:私はそれが更新のVisual Studio 2003ではないのVisual Studio 2005

た、/ MLスイッチへの参照を取り出した:あなたは、その後afxframewndex.hを追加した場合、いくつかのより多くの本を考えますafxole.hが明示的に含まれている必要はありません。

あなたは/showIncludesをオンにしてプログラムをコンパイルする場合は、[出力]ウィンドウには、このような何かを示さなければならない...

1>Note: including file: c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxframewndex.h 
[snipped all the includes due to afxframeimpl.h and afxcontrolbarutil.h] 
1>Note: including file: c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxpopupmenu.h 
1>Note: including file: c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxpopupmenubar.h 
1>Note: including file:  c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxtoolbar.h 
1>Note: including file:  c:\program files (x86)\microsoft visual studio 9.0\vc\atlmfc\include\afxtoolbardroptarget.h 
1>Note: including file:  c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\atlmfc\include\afxole.h 

あなたはafxole.hのあなたの明示の#includeを取り除くと、その理由を把握する必要がありますafxframewndex.hがインクルードされているにもかかわらず、COleDropTargetの基底クラスは未定義です。

関連する問題