3

Geant4 (物理ライブラリ) を使用してコードを実行し、VS2010 でコンパイルしようとしています。Geant4 のいくつかのライブラリは、私の C++ ライブラリとのマッチングに問題があるようです。コンパイルでは、次のような膨大な数の同様のエラーが発生します。

libG4Tree.a(G4ASCIITree.o): エラー LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました: 値 '0' は Workshopexample1.OBJ の値 '2' と一致しません

そして、G4 ライブラリにある 100 を超える異なる .a ファイルでこのエラーが発生します。デバッグ レベルをオフ ('0') にする必要があります。そうしないと、G4 コードの実行に何年もかかることになります。したがって、_ITERATOR_DEBUG_LEVELVS2010 でこれが定義されている場所を見つけて、不一致を避けるために「0」に設定する必要があります。誰でも助けることができますか?乾杯、パヤム

4

1 に答える 1

2

このエラーは、デバッグ ビルドとリリース ビルドを同じ実行可能ファイルまたは DLL に混在させることによって発生する可能性があります。

/MD の代わりに /MDd を使用した静的ライブラリのリリース バージョンですが、アプリケーションはリリースでは /MD です。静的 lib プロジェクトで正しい /MD を設定すると、問題が解決しました。

これはプロジェクトのプロパティで行います

Select Configuration Properties / C C++ / Code Generation in the tree
and the option Runtime Library set to the same on all your dependencies projects and application.

_ITERATOR_DEBUG_LEVEL と _SECURE_SCL を検索して、それらを削除するか、すべてのプロジェクトとソースで適切に設定して、すべてを再構築します。

_ITERATOR_DEBUG_LEVEL = 0 // disabled (for release builds)
_ITERATOR_DEBUG_LEVEL = 1 // enabled (if _SECURE_SCL is defined)
_ITERATOR_DEBUG_LEVEL = 2 // enabled (for debug builds)

つまり、おそらくリリース dll とデバッグ dll が混在しています。デバッグでリリース DLL をリンクしたり、その逆を行ったりしないでください。

于 2014-08-05T11:29:14.737 に答える