1

ランタイムライブラリ/MTd/ MTなどの意味は何ですか?

http://msdn.microsoft.com/en-us/library/2kzt1wy3(v=vs.71).aspxを読んでも、私を納得させることはできませんでした。

すべての「リリース」が「/MD」で、すべての「デバッグ」が「/MDd」であるサードパーティプロジェクトを使用する必要があります。私のすべてのプロジェクト(他の人が使用しているため、変更できません)には「/MT」と「/MTd」があります。

そのサードパーティプロジェクトのライブラリを入力としてプロジェクトに追加する必要があります。リンカエラーを回避するために、プロジェクトに一致するようにそのプロジェクトの設定を変更しました。

私はその意味を理解せずにそれをしました。

私のプロジェクトはビルドされ、動作しているようです(まだ多くの機能を使用していません)が、元のプロジェクトの実行可能ファイルはもうビルドされません。次のようなエラーがあります。

error C1189: Please use the /MD switch for _AFXDLL builds   c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\afxver_.h

だから...私はすべてを正しく機能させる方法、または私の変更の意味がわかりません。

どういうわけか/MDライブラリと/MTライブラリを組み合わせることができますか?両方のプロジェクトを機能させるにはどうすればよいですか?

4

1 に答える 1

3

この/MDフラグは、-plusと同じ情報を暗黙的に定義し/MT、ランタイムライブラリのDLLバージョンを使用していることを示します。

/MTとフラグは/MD基本的に両方ともランタイムライブラリのマルチスレッドバージョンを使用することを示しています。違いは、ライブラリ内で静的にリンクしている/MD間、DLLベースのバージョンを使用することを示していることです。/MT

追加のフラグはすべてdデバッグ/MDdバージョンです。つまり、DLLベースのマルチスレッドランタイムライブラリのデバッグバージョンを使用することを意味します。

失敗したプロジェクトが機能しなくなる原因についての質問には、多くの詳細はありません。すべてを使用するように切り替える場合/MDは、プロジェクトと一緒にランタイムDLLを含める必要があります。これが、現在失敗している理由である可能性があります。(以前は、を使用すると/MT、プロジェクトに静的にリンクされていました。)

ちなみに、VS2010バージョンのフラグのドキュメントはかなり理解しやすいです。フラグの意味は変更されていませんが、後のドキュメントリリースでは言語が大幅に簡素化されました。リンクしたVS2003のドキュメントではなく、2010年のノートを見ると理解が容易になる場合があります。

于 2012-10-18T17:15:43.340 に答える