私は文字通り1週間ずっと取り組んできたかなりトリッキーな問題に取り組んでいます。私は非常に難しい壁にぶつかり、額をぶつけて痛いので、誰かが私を助けてくれることを願っています.
このプロジェクトに Visual Studio 2005 を使用しています。2008 をインストールしましたが、試してみると同様の問題が発生していました。
現在、OpenCv1.1 に対してコンパイルされたアプリケーションが動作しており、それを 2.2 に更新しようとしています。新しいライブラリへのリンクを静的に切り替えると、アプリケーションがクラッシュしますが、リリース モードでのみ発生します。したがって、動的リンクとデバッグの両方が正常に機能します。
std::vector
を呼び出すとクラッシュしpush_back
ます。
次に、opencv でいくつかの基本的なコードを実行するサンプル テスト アプリケーションを思いつきました。このコードは問題なく動作し、まったく同じコードを取得してアプリケーションに追加しました。そのコードは失敗します。
次に、メインの GUI とそのコードを呼び出した 1 つのクラス以外のコード オブジェクトをインスタンス化しないように、アプリケーションを完全に削除しましたが、それでもクラッシュしました。ただし、そのコードをメイン GUI で直接実行すると、問題なく動作しました。
次に、膨大な量のアプリケーション (インスタンス化されるべきではないコンポーネント内) をコメントアウトし始め、最終的には...
メソッドを持つクラスがあります
void Foo()
{
std::vector<int> blah;
blah.begin();
}
このメソッドがヘッダーで定義されている場合、テスト コードは機能しますが、このコードが cpp ファイルで定義されている場合はクラッシュします。また、std::vector<double>
intの代わりに使用しても機能します。
次に、コンパイラ オプションを試してみましたが、最適化をオフ (/Od) にし、インライン関数展開を __inline のみ (/Ob1) に設定すると、cpp ファイル内のコードでも機能します。
もちろん、完全なアプリケーションに戻ってこれらのコンパイラ オプションを変更すると、アプリケーションはクラッシュします。
誰かがこれについて何か洞察を持っているなら、私に知らせてください。
ありがとう、ライロン