スキップしてメイン コンテンツに移動

error LNK2005:

nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) はすでに libcpmtd.lib(delop.obj) で定義されています
nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int,int,char const *,int)" (??2@YAPAXIHPBDH@Z) はすでに LIBCMTD.lib(dbgnew.obj) で定義されています


VC6.0でMFCプロジェクトでたまに出るリンカーエラー。
C ランタイム ライブラリを MFC ライブラリより先にリンクしたときでるらしい。

「プロジェクト」→「設定」→「リンク」から、カテゴリを「インプット」にして、「オブジェクト/ライブラリモジュール」に「Nafxcwd.lib Libcmtd.lib」、無視するライブラリに「Nafxcwd.lib Libcmtd.lib」とやれば解決。Nafxcwd.lib Libcmtd.libはDebug用のライブラリだから、リリース時には、「Nafxcw.lib Libcmt.lib」にしないとダメ。


この辺が参考になります。
http://frog.raindrop.jp/knowledge/archives/000503.html
http://isobe.exblog.jp/3506901/
http://support.microsoft.com/default.aspx?scid=kb;ja;148652

人気blogランキングへ にほんブログ村 IT技術ブログへ ブログランキング ドット ネット

コメント

このブログの人気の投稿

へーー

PHPで実行ファイルが出来ちゃうんだって。 今度、試してみよう。 そのうちに。。。

C++でプロパティ

こんなんの 出来るんだって。 C++で a.property = 0; int t = a.property; か。

LINK : warning LNK4098

VCで他のLibをリンクするとこんなメッセージが出る。 LINK : warning LNK4098: defaultlib "msvcrtd.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください LINK : warning LNK4098: defaultlib "nafxcwd.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください LINK : warning LNK4098: defaultlib "libcmtd.lib" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください よく、「スタティックライブラリでMFCを使用」と出ていたので、「共有DLLでMFCを使用」に変更していたが、ここでなぜ出るか少しだけ調べて見る。 ランタイムライブラリがVisualStdioでシングルスレッド、マルチスレッド(DLL)、マルチスレッドで3種類。デバッグ、リリース版で計6種類用意されている。 ちなみに、 MSVCRT.lib マルチスレッド(DLL) Release /MD(コンパイルオプション) MSVCRTd.lib マルチスレッド(DLL) Debug /MDd LIBCMT.lib マルチスレッド Release /MT LIBCMTd.lib マルチスレッド Debug /MTd LIBC.lib シングルスレッド Release /ML LIBCd.lib シングルスレッド Debug /MLd となっている。 コンパイラーオプションは、「プロジェクトの設定」→タブ「C/C++」→カテゴリ「コード生成」で確認できる。 ライブラリで作成したときにリンクしたランタイムライブラリと現在のアプリで使用しているランタイムで異なっているためにエラーが出ているようだ。 ライブラリのソースコードがあれば、コンパイルオプションをアプリと同じオプションに変え作成しなおせば直りそうです。しかし、ソースコードがなければ、ライブラリのオプションにアプリを合わせないとだめかぁ。。。しかし、アプリが「マルチスレッド」、...