0

いくつかの C++ プロジェクトでブーストを使用しています。最近、アップグレード (1.33.1 から 1.36、すぐに 1.37 へ) を行いました。それ以来、デバッグビルドを実行できなくなりました。

他のプロジェクトの問題が残っていないことを確認するために、boost.thread のみを含む最小限のテスト プロジェクトを作成し、それを使用して 1 つのメソッドを開始しました。リリース ビルドは開始できますが、デバッグ ビルドは開始できませんが、必要なすべてのライブラリが見つかったことがDependency Walkerによって示されます (これは、必要な MS Debug CRT が SxS ディレクトリにあることも意味します)。

起動時に取得するのは次のとおりです。

Die Anwendung konnte nicht richtig initialisiert werden (0xc0150002)。Klicken Sie auf "OK", um die Anwendung zu Beenden.

つまり、「アプリの初期化に失敗しました」というだけです。インターネット調査では、主にMS Office のインストールに関する問題が発生しており、WinXP の修復を推奨しています。

それで、修復セットアップ(debug-dllの問題について話しているので役に立たないと思います)のほかに、何かアイデアはありますか?

ああ、忘れる前に: 完全に同じソース コードは、ビルド マシンでエラーを発生させません (つまり、DLL を登録することができ、実行されることを意味します)。明らかにインストールの問題ですが、DLLそこにあり、dependency-walker がそれを見つけたので、他に何を忘れたのでしょうか?

(編集) さて、私はまだ問題を解決していませんが、deemok のおかげで一歩前進しました。誤解を減らすために、以下にいくつかの説明をします。

  • 開発者マシンでプログラムを実行できない
  • インストールされた VS2005 で作業しています(これは VC++8 プロジェクトです)
  • BoostProのブーストセットアップを使用し、可能なすべてのビルドバージョンをコンパイルし、それらが存在することを再確認しました (そうしないと、ビルド中に既にリンカーエラーが発生していました)。
  • そして、私が考えることができる include/lib/bin 構成の隅々を再確認しました-ブーストはウィンドウで自動リンクを使用するため、特別な命名規則を使用して、ビルドまたは起動が失敗し、はるかにわかりやすいエラーメッセージ。
  • boost.thread は DLL プロジェクトの動的リンクを必要とするため、静的リンクは使用できません(ここで混乱する可能性がありますが、この問題は私のマシンでのみ発生するように思われるため、これを混乱させたくありません。ブースト担当者には、そもそもそのチェックインをそこに配置する理由がありました)
  • 私が書いたように、依存関係ウォーカーに確認したところ、すべて問題ないとのことです。

現在、boost-dll にエラーがあるようです (マニフェストが正しくない可能性があります)。それを確認します。

4

4 に答える 4

3

これはSide-by-Side (SxS) の問題です。単に DLL をコピーするだけでは不十分です。

デバッグ ビルドに関する特定の問題については、次を参照してください:非開発マシンでの vc2008 デバッグ ビルドの実行

簡潔な答え:

デバッグ ランタイムのインストーラーの再配布がないため、できません (実際、ソフトウェア ライセンスでは配布が禁止されているため、何かをまとめたとしても EULA に違反することになります)。

したがって、そこに Visual Studio をインストールする必要があります。

ただし、その道をたどらずに試してみたい場合は、puetzk の回答全体を読むことができます。

または、すべてを静的にリンクしようとすることもできます。

于 2009-01-13T17:09:22.223 に答える
1

これはSxSとは何の関係もないことが判明するかもしれません。イベントログでSxSエラーメッセージを確認し、依存関係ウォーカーを使用してDLLの依存関係の問題の可能性が最も高いかどうかを確認することをお勧めします。そうでない場合、DLLの1つがDllMainからFALSEを返します(何らかの理由で)。

また、ローダースナップを有効にします。

gflags -i yourapp.exe + sls

デバッガー(または依存関係ウォーカー)で実行すると、余分な光が当たる可能性があります。

注:gflagsはWindowsデバッグツールの一部です。

于 2009-01-13T18:04:41.143 に答える
1

BoostProのビルド済みライブラリを使用しているのでしょうか。もしそうなら、あなたの環境は何らかの形でそれらが組み込まれたものとわずかに異なるかもしれません (TR1 機能パックかどうかなど)。おそらく、特定の環境でBoost を構築してみるのが最善でしょう。

于 2009-01-13T21:31:50.773 に答える
0

依存関係ウォーカーを入手してください。その中でアプリケーションのexeを開きます。アプリケーションが必要とするが、ロード/アクセスできないすべての dll が表示されます。

それだけでは不十分な場合は、依存関係ウォーカーを使用してアプリをプロファイリングすることもできます。これにより、問題の場所を見つけるための多くの出力が得られます。

[編集] デバッグ ビルドにしか問題がないため: ブーストをアップグレードしたときに、リリース バイナリだけでなく、ブーストのデバッグ バイナリも再ビルドしたことを確認してください。もちろん、デバッグ ビルドが、現在使用している VisualStudio と同じバージョンでビルドされていることを確認してください。

インクルード パス (ツール -> オプション -> プロジェクトとソリューション -> VC++ ディレクトリ) が正しいことを確認してください。

于 2009-01-13T17:40:59.117 に答える