質問

プロジェクトの名前を変更するために長いプロセスを経た後、私のDLLプロジェクトをデバッグモードでビルドしません(リリースは仕事を構築します):

MSVCRTD.lib(msvcr90d.dll) : error LNK2005: _CrtDbgReportW already defined in LIBCMTD.lib(dbgrpt.obj)

このプロジェクト、およびそれが依存する5つの静的ライブラリ、(C / C ++の下で|コード生成|ランタイムライブラリ)「マルチスレッドデバッグ(/ MTdに)」を使用するように設定されています。私はLIBCMTD.libがマルチスレッドデバッグするためのものであると考えているが、何がMSVCRTD.LIBであり、このエラーを引き起こしている可能性がありますでしょうか?

それが違いをした場合、このDLLは、Windows CE用です。

役に立ちましたか?

解決

LIBCMTはあなたが/ MT必要なもので、MSVCRTはあなたが/ MDのために必要なものです。あなたは.OBJと混合した.libファイル、/ MDといくつかの/ MTでコンパイルされたいくつかをリンクされています。それは良いではありません。

は通常、それが問題を引き起こすの.libファイルです。彼らのビルド設定を確認し、必ずその/ Mオプションは、あなたのDLLプロジェクトと同様であることを確認します。

また、あなたはDLLが/ MTコンパイルされた場合に得ることができ、トラブルに注意します。オブジェクトへのDLLの戻りポインタがクライアントを解放する必要があるとするときは、大きな問題があるでしょう。それは、それは同じメモリアロケータを使用していないことはできません。

他のヒント

LNK4098 の上のMSDNの記事非常に便利なテーブルを持っている:それはあなたが使用しているどのCRTに応じて、リストの「特定のライブラリの無視」に追加し、手動にどのライブラリがわかります。あなたのケースでは、これらのすべてを無視する必要があります:

libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib

報告ライブラリがあまりにもこのリストに含まれていることを確認します。問題は、プログラムは、Visual使用して構築されたときにリンクすることを KB154753 ...図書館でより詳細に記載されていますC ++

この私の解釈は、自動的にCRTライブラリがであなたのコードをリンクするピックは、いくつかの矛盾するライブラリを選択することが特定の状況では、アルゴリズムということです。

リリースには、あまりにも何をして設定されていますか?あなたは何かが(彼らは例えば、別のヒープに割り当てられます)DLLを解放しようとするaccesingというメモリを割り当てる場合は、マルチスレッドデバッグするDLLを設定すると、問題を引き起こす可能性があります。マルチスレッドデバッグDLLを設定してみてください。

あなたがリンクしているライブラリがリンクにリンカが試行するように、マルチスレッドデバッグDLLを期待しているの両方とあなたのリンクが...

が失敗したため、

あなたのリンクの問題は、おそらく発生します

問題は、msvcr90d.dllは、Windows CEイメージではないです。これは、アプリケーションを配備する必要があります。 msvcr90d.dllは$(VCInstallDir)/ CE / binに/ $(ARCHFAM)に位置しています。

http://stackoverflow.com/questions/15959877/windows-ce-6-0-and-runtime-link-to-debug-dll-mdd

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top