2012-01-24 12 views
2

ここからいくつかの複数の定義エラーの質問があることを理解していますが、これで困惑しています。最適化レベルからのC++多重定義リンカーエラー

開発中のモジュールとデバッグ時にビルドしたモジュールがあります(-DDEBUG -g -O0)。今、私は私が構築リリース-DNDEBUG -Osを作りたいと私は

  • のstd :: basic_ios> :: basic_ios()
  • のstd :: __ throw_bad_allocを含むいくつかのSTLの定義の複数の定義のためのリンカエラーを取得すること()
  • のstd ::文字列::アサイン(char型のconst *)V
  • エトセトラ
  • 私は私のプロジェクト、すべてのヘッダファイルは#ifndefのガードを持っているとヘッダファイル内の唯一のコードをインライン宣言されているを確認している

私は-DNDEBUG -O0でコンパイルできますが、どのレベルの最適化でもコンパイルできないことがわかりました。構築プロセスには約2ダースのオブジェクトを構築し、それらをリンクします。最適化がリンカーを殺すのはなぜですか?どうすればこの問題を解決できますか?

TDMで構築するMinGW 4.6.1。

答えて

0

この問題は、MFCデバッグファイルをリリースモードで含めるか、その逆の場合も同じです。 でも同じ問題になる可能性があります。これは単なる推測です。私は推測しているものを解決するために

は、次の操作を行い、原因である:

#ifdef _DEBUG 
#define DEBUG_WAS_DEFINED 
//include files that give you multiple definitions here 
#endif 

//..... 
//..... 
//rest of code/includes 

#ifdef DEBUG_WAS_DEFINED 
#undef DEBUG_WAS_DEFINED 
#define _DEBUG //revert to previous state 
#endif 

あなたは、このリンクを見てとることをお勧めします:http://www.flounder.com/debug_release.htm、混合DLLのに関するセクションを。

+0

私が質問で言ったように、私は問題ファイルが何であるかを見つけることができません。どのファイルが問題の子供であるか把握するのに役立ちますか? –

+0

@AndrewReddあなたはどんなMFCヘッダーも含んでいますか?もちろん、ソースを見つけるまでファイルを削除しようとすることができます。 –

+0

私は、混在したDLLの問題はこれと関係がないとは思わない。私は完全にクリーンで、デバッグとリリースを混在させずにビルドしています。 –