5

次の行をコードに追加したとき:

std::string sFrameTag

次のリンカ エラーが発生しました。

エラー 34 エラー LNK2005: "public: __thiscall std::basic_string,class std::allocator >::~basic_string,class std::allocator >(void)" (??1?$basic_string@DU? $char_traits@D@ std@@V?$allocator@D@2@@std@@QAE@XZ) は VFPAnalyzerApi.lib(VFPEvaluation.obj) msvcprtd.lib で既に定義されています

C/C++ -> コード生成 -> ランタイム ライブラリの下にあるプロジェクトのプロパティを見て、それを から/MDdに変更する/MD と、どういうわけかエラーが消えました.. 誰かが私が正確に何を変更したのか、なぜそれが違いを生んだのか説明してもらえますか?

ありがとう!!!

4

5 に答える 5

6

MSDNには、これに関する優れたドキュメントがあります。

つまり/MDd、C & C++ 標準ライブラリのデバッグ ビルドの必要な部分を DLL にリンクします。 /MDは似ていますがNDEBUG、標準ライブラリのバージョンを使用しています。デバッグとリリースの標準ライブラリを組み合わせたコードをリンクしようとすると、両方のライブラリが同じ関数セットを提供するため、シンボルの衝突が発生します。

于 2013-03-28T09:43:46.723 に答える
4

/MD は、マルチスレッドの DLL ランタイム ライブラリを使用します。/MDd は、同じライブラリのデバッグ バージョンを使用します

MD でビルドされた別のライブラリを使用しているため、ランタイム ライブラリのリリース バージョンにリンクしている可能性があります。(したがって、すでに定義されているエラー)

于 2013-03-28T09:45:45.917 に答える
1

ランタイム ライブラリには、すべての標準ライブラリ クラスと関数の実装が含まれています。プログラムが機能するように、これらの実装を提供する必要があります。Visual Studio には次の 2 つのオプションがあります。

  • ランタイム ライブラリはプログラムのバイナリにコンパイルされませんが、アプリケーションの前に Visual Studio ランタイムをインストールする必要があります (そうしないと機能しません)。
  • ランタイム ライブラリは、プログラムのバイナリにコンパイルされます。これにより、サイズがわずかに増加しますが、動作するために追加のランタイムは必要ありません。

さらに、これらのライブラリのデバッグ バージョンとリリース バージョンのどちらが必要かを選択できます。次の 4 つの選択肢があります。

  • /MDd - マルチスレッド デバッグ DLL
  • /MD - マルチスレッド DLL
  • /MTd - マルチスレッド デバッグ
  • /MT - マルチスレッド

Visual Studio を使用している場合は、プロジェクト プロパティで次のオプションを変更できますConfiguration Properties | C/C++ | Code Generation

ニーズに最も適したオプションを選択する必要があります。ただし、必要な関数トランスポートを含む適切な静的ライブラリを提供する必要があります。リリースからデバッグ構成に切り替えたため、コンパイラが不平を言いました (デフォルトのデバッグおよびリリース構成には、リンクする適切なライブラリ セットが既にあります)。

于 2013-03-28T09:44:58.593 に答える
1

ランタイム ライブラリには複数のバージョンがあります (デバッグ、マルチスレッドなど)。プロジェクトをビルドするときは、すべてが同じバージョンを使用していることを確認する必要があります。そうしないと、質問のようなエラーが発生します。

詳細については、「/MD、/MT、/LD (ランタイム ライブラリを使用)」を参照してください。

于 2013-03-28T09:44:24.523 に答える
1

違いは/Mdd、ランタイムのデバッグ バージョンを指定するのに対し、指定/MDしないことです。/MDdシンボルを設定するので、ステートメント内で宣言されている_DEBUG場合はおそらくそれが問題です。この MSDN の記事を参考にしてください。std::string sFrameTag#ifdef _DEBUG

于 2013-03-28T09:46:55.503 に答える