2011-12-16 2 views
0

アンマネージドC++のlibを使用するマネージC++のDLLがあります。私はマネージドプロジェクトの "Additional Dependencies"にlibファイルを追加しました。残念ながら、エラーをリンクするmsvcprtd.libにすでに定義されているstd :: localeのダースがあります。管理されたDLLをアンマネージドLibにリンクする

私はdllと両方を一緒にリンクするように両方を構築する必要がありますか?

+0

両方のプロジェクトで使用されているランタイムライブラリを確認しましたか? C/C++ - >コード生成 - >ランタイムライブラリの下にあります。無関係かもしれませんが、このようなエラーが発生するたびに、通常、ランタイムライブラリの不一致が原因です。 – obmarg

+0

しました。 dllが管理するプロジェクトは、マルチスレッドデバッグDLLです。一方、管理されていないlibはマルチスレッドデバッグです。どちらも私によく見えます。 – SmallChess

+0

それはあなたの問題です、そして、彼らは両方とも一致する必要があります。私は答えを詳述します。 – obmarg

答えて

2

プロジェクトのいずれかの実行時ライブラリ設定を変更する必要があります。ランタイムライブラリ設定の「マルチスレッドデバッグDLL」オプションは、プロジェクトがDLLではなくランタイムライブラリのDLLバージョンとリンクされることを意味します。 「マルチスレッドデバッグ」とは、標準ライブラリの.libバージョンとリンクすることを意味します。

異なる設定を使用する2つのプロジェクトをリンクすると、それらは重複する参照で終わります。静的ランタイムライブラリからの1つの参照とDLLランタイムライブラリからの1つの参照。これがエラーの原因です。

どの設定を選択するかは、プロジェクトでランタイムDLLを配布するかどうか(またはすでにDLLを所有しているユーザーをカウントするかどうか)によって異なります。このオプションを使用する場合は、DLLランタイムライブラリを選択し、そうでない場合はDLL以外のバージョンを選択します。非DLLバージョンの欠点は、DLL/EXEにすべてのランタイムライブラリコードが埋め込まれていることです。

編集:実際には、もう少しそれを見てください。 This linkはCLRプロジェクト(私はあなたがC + +で管理されていると思われる)を使用すると、静的リンクオプションを使用できないので、両方に "マルチスレッドDLL"オプションを使用する必要があることを示します。

関連する問題