2009-05-15 25 views
1

C++ CLRで/ MTでコンパイルされたライブラリを使用することは可能ですか?それは私にLNK2022の大量の「メタデータ操作が失敗しました(8013118D)」(CLRプロジェクトで/ MDを使用する場合)エラーまたは「/ MT」と「/ clr:純粋な」コマンドラインオプションが互換性がありません/ MTを使用します。静的にリンクされたアンマネージライブラリとC++ CLR

ライブラリで変更する必要があるのは何ですか?ライブラリは私のものですが、サードパーティの静的ライブラリがいくつか含まれています。

答えて

3

LNK2022は、ピンポイントの痛みです。これは、通常、構造レイアウトに影響を及ぼすモジュールの構成の1つが他のモジュールと異なることを意味します。

次の通常の原因についてチェック:

  • は、すべてのプロジェクトは、あなたの現在のソリューション構成に同じランタイムライブラリ(/ MDDまたは/ MD)を使用していることを確認してください。あるプロジェクトがデバッグを使用している間に他のプロジェクトがリリースを使用している場合、またはその逆の場合、LNK2022エラーが発生します。
  • すべてのプロジェクトが同じ構造体の配置を使用していることを確認してください。 1つのプロジェクトが/ Zpスイッチを使用している場合は特に注意してください。また、#pragma pack(n)を条件付きで使用しないでください。

問題のあるクラスのレイアウトに関する情報を得るには、/ d1reportSingleClassLayout_your-class-name_(スペースなし)を使用できます。詳細については

は、以下を参照してください。Diagnosing Hidden ODR Violations in Visual C++

+0

ほぼ/ Zpまたはプラグマパックであることが保証されています。 – ConsultUtah

1

私は別のCRTランタイムのバージョンでコンパイルされたネイティブコードの静的ライブラリを混合するために見つけた唯一の方法は、図書館間のブリッジのように機能するDLLを書くことです。 例:

your.exe -/MDとclrでコンパイルされます。 yourbridge.dll -/MTでコンパイルされ、/ MTを使用して構築されたすべてのサードパーティ製ライブラリが含まれます。

関連する問題