1

Boostに依存するアプリケーションを構築しています。私のアプリケーション出力は、最終的に別のクライアントアプリケーションによって使用されるライブラリです。最近、コード生成(デバッグCRTライブラリ)に/ MDdを使用してデバッグモードでアプリケーションを構築しており、クライアントアプリケーションがデバッグモードでもリリースCRTに対して構築されていることを発見しました。したがって、これにより、メモリヒープの破損エラーが発生する可能性があります。確認するために、これはリリースモードですべてをテストしましたが、すべて正常に動作します。

この問題に対処するために、CRTリリースライブラリに対してデバッグモードでアプリケーションをビルドしました...しかし、アプリケーション(スタンドアロンテスト)は実行時に失敗します。私の理解では、これはブーストの依存関係によるものであり、ブーストデバッグはおそらくデバッグCRTライブラリに対して構築されていますか?Boostのドキュメントを調べましたが、必要なものが正確に見つかりませんでした...リリースCRTに対して(デバッグモードで)Boostを再構築する方法はどれですか?ヘルプ/アイデア/例に感謝します。御時間ありがとうございます!

4

2 に答える 2

2

@AlKeppの回答に加えて、Dependency Walker(http://dependencywalker.com/)をご覧になることをお勧めします。これは、ライブラリまたはアプリケーションがどのライブラリに依存しているかを示す無料のツールです。通常、Microsoft C / C ++ランタイムDLLのリリースバージョンまたはデバッグバージョンのいずれかのみが表示されることを確認する必要があります(例:MSVCP90.DLLvs MSVCP90D.DLL)。

アプリが実行時にさらに多くのライブラリ(プラグインなど)をロードする場合は、を使用してDependencyWalkerProfile->Start Profilingからアプリケーションを実行します。次に、実行中に実際にロードされた、またはロードを試みたすべてのライブラリが表示されます。

これは、依存関係の問題を解決するのに非常に役立ち、特にリリースビルドとデバッグビルドを誤って混在させた場合に非常に役立ちました。

于 2012-06-19T07:54:44.283 に答える
1

私は過去に同様の問題を抱えていました。デバッグ機能がオンになっているリリースビルドのみを使用して解決しました。デフォルトのリリース構成を変更して、必要なすべてのデバッグ情報を生成し、最適化またはその一部を省略するか、デフォルトのリリース構成のクローンを作成して、元の(つまり実際のリリース)とデバッグの両方を行うことができます。有効なリリース構成。

于 2012-06-17T21:04:18.703 に答える