2009-06-01 16 views
2

これは私の以前の質問と同じであるように見えますが、この近くにシナリオがあります。それでも私は答えを得ていません。 したがって、重複として報告しないでください。Visual C++ランタイムライブラリリンカーの苦痛

私は10の依存関係を持つプロジェクトを持っています。最初に、メインプロジェクトのC/C++コード生成セクションで/ MTDオプションを使用してコンパイルし、すべての依存関係が正常にビルドされています。

次のオプションを/ MTDから/ MDdに変更し、再びすべての依存プロジェクトが ビルドに成功しました。しかし、主なプロジェクトのために、次のエラーが報告されています


LIBCMTD.lib(osfinfo.obj) : error LNK2005: __open_osfhandle already defined in MSVCRTD.lib(MSVCR80D.dll) 

LIBCMTD.lib(lseeki64.obj) : error LNK2005: __lseeki64 already defined in MSVCRTD.lib(MSVCR80D.dll) 


sqlite3x.lib(sqlite3x_command.obj) : error LNK2005: "protected: wchar_t * __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> >::_Myptr(void)" ([email protected][email protected][email protected][email protected]@@[email protected][email protected]@@[email protected]@IAEPA_WXZ) already defined in msvcprtd.lib(MSVCP80D.dll) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __mkdir already defined in LIBCMTD.lib(mkdir.obj) 

MSVCRTD.lib(MSVCR80D.dll) : error LNK2005: __strdup already defined in 
LIBCMTD.lib(strdup.obj) 

    Creating library Debug/Application.lib and object Debug/Application.exp 
LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library 

私はこの問題を解決するにはどうすればよいですか?

+0

元の質問を編集すると、質問が繰り返される代わりに詳細が追加されます。質問を更新すると、それは最初のページに戻されます。あるいは、賞金を加えてより多くの注目を集めることもできます。 – tvanfosson

+0

誰でもクローズに投票しても、その複製にリンクしてください。ありがとうございました。 –

+1

重複:http://stackoverflow.com/questions/925540/how-to-resolve-the-following-linker-errors-in-visualstudio – tvanfosson

答えて

5

Cランタイムライブラリを混在させることはできません。あなたが/ MT(何か)をコンパイルしたライブラリやオブジェクトを持っているなら、/ MDとリンクするだけではいけません。スレッドセーフMSVCRTにリンクする必要があります。もしそれがあっても、それとも、それについてのことはない。あなたはできません。ミックスCランタイム。私は常にスレッドを使わないプログラムでも、/ MTだけを使うのが最良だと思っています。

既にビルド済みのオブジェクトとライブラリを削除するために、プロジェクトのクリーン操作を実行しましたか?あなたはここでもSQLiteに依存していますが、それも再構築しましたか?

1

C++ライブラリの静的の束全てがつながっている場合、それらはすべて持っている必要があります/ MTDまたはそれらはすべて/MDd.Youは/ MDD

で別のプロジェクトで/ MTDでプロジェクトをリンクすることはできません持っている必要がありますこれはおそらくあなたのリンクエラーの理由です。なぜあなたがメインプロジェクトでのみそれを取得している理由は、あなたの主なプロジェクトは、リンクを実際に行う唯一のものです。あなたの問題を解決した場合は、教えてください。

私は以前に/ MTDと/ MDdで同じ問題があったと思いますが、私は非常に似たエラーがありました。

0

私の回答hereは、この問題の私のバージョンを解決するのに非常に役立ついくつかのMSDNの記事にリンクしているかもしれません。