'_ITERATOR_DEBUG_LEVEL' の不一致?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ろびん

'_ITERATOR_DEBUG_LEVEL' の不一致?

#1

投稿記事 by ろびん » 14年前

現在、趣味でゲームプログラミングをしているのですが、リリースビルドでエラーが出てしまいビルドできません。

VC++2010ExpressでDirectX、Bullet、boostライブラリを使っています。
またプロジェクト構成はGameLibのようなライブラリを作成するプロジェクトと、
ゲーム本体のプロジェクトに分けて作っています。
GameLibのほうで、DirectXとBulletのライブラリをライブラリアンで依存ファイルとしています。
また、ゲーム本体のプロジェクトはGameLibをリンクさせて組んでいます。
GameLibのビルドは、デバッグ、リリースともビルドできているのですが、
ゲーム本体のリリースビルドができません。デバッグビルドは問題なくできます。
Bulletのライブラリを使用しない段階ではエラーなくリリースビルドできたのですが、
Bulletのライブラリを使用するコードを追加するとエラーが出てしまいます。
エラー内容は
error LNK2038: '_ITERATOR_DEBUG_LEVEL' の不一致が検出されました。値 '2' が 0 の値 'Main.obj' と一致しません。
というのが、使用するBulletのオブジェクト毎に出ています。
Bulletのライブラリはリリースビルドしたものをリンクさせて、ランタイムライブラリもそろえています。
おそらく、Bulletのライブラリのビルド設定とそれ以外のビルド設定の違いに問題があるのだろうと思うのですが・・・。
"_ITERATOR_DEBUG_LEVEL"でググってみても、ほとんどが海外のサイトで、なかなか解決方法が調べられませんでした。

ちなみにBulletのバージョンは2.78です。
どなたか解決方法がわかる方いましたら、ぜひ教えていただきたいです。宜しくお願いします。

hjkl

Re: '_ITERATOR_DEBUG_LEVEL' の不一致?

#2

投稿記事 by hjkl » 14年前

visual studioもbulletも使ってないのでテキトーですが...

なんとなく思いつくのは

デバッグビルドとリリースビルドが混在しているとあまりよくない(?)みたいなので
いちど生成したオブジェクトをすべて消去し、リビルドしてみるとか。

プリプロセッサの定義(プロジェクトの[プロパティページ] -> C/C++ -> Preprocessor)で _ITERATOR_DEBUG_LEVEL=0 にするか。

bulletのビルドがデバッグビルドの可能性も。

ろびん

Re: '_ITERATOR_DEBUG_LEVEL' の不一致?

#3

投稿記事 by ろびん » 14年前

プリプロセッサで_ITERATOR_DEBUG_LEVELを色々定義してみたのですが、やはり同様のエラーがでます。
GameLibとゲーム本体のランタイムライブラリをデバッグのものに変えてやると、警告はでますがビルドが通りました。
ということは、Bulletのビルド設定をどこか変えてやるといいのではないかと思いますが、いまだにわからないままです。

hjkl

Re: '_ITERATOR_DEBUG_LEVEL' の不一致?

#4

投稿記事 by hjkl » 14年前

_ITERATOR_DEBUG_LEVELの定義はゲーム本体プロジェクトではなくBulletのプロジェクトのほうをいじって、
Bulletライブラリ自体をもう一度リビルドしてみては。
ゲーム本体の定義が0でbullet側の定義が2になっているからエラーがでているみたいなので。

あとゲーム本体とGameLibとBullet、すべてのリリースビルド時の_ITERATOR_DEBUG_LEVELが一致しているか確認してみては。

っと言ってもゲーム本体の定義を2にすればbullet側と定義が合うはずなのでそれで解決しない時点で別の問題かもしれませんが...。

以下は参考URLです。

What does _ITERATOR_DEBUG_LEVEL = 1 mean? - Stack Overflow
_iterator_debug_level value '0' doesn't match value '2' - Stack Oveflow
Boost.MultiArrayでresize()やview()がコンパイルできない件 - GFSの興味ごととか
Visual Studio 2010 Part15 - 157 :141:2011/06/25(土) 00:37:20.02

ろびん

Re: '_ITERATOR_DEBUG_LEVEL' の不一致?

#5

投稿記事 by ろびん » 14年前

言われたとおり、Bulletのビルドのときのプリプロセッサーで"_ITERATOR_DEBUG_LEVEL=0"を定義してやるとビルドできました。
ゲーム本体の_ITERATOR_DEBUG_LEVEL=2は、リリースビルドではサポートされません、とログが出てビルドエラーになっていました。
リリースビルドで_ITERATOR_DEBUG_LEVEL=2は無効なのにBulletはなぜ_ITERATOR_DEBUG_LEVEL=2となっているのだろう、
という疑問も出てきましたが、とりあえず解決しました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る