WinXPのデバッグバージョンでブースト(C ++)ライブラリを使用している場合、プログラムを実行できません
-
22-07-2019 - |
質問
いくつかのC ++プロジェクトでboostを使用しています。最近、デバッグビルドを実行できなくなったため、アップグレード(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&quot ;, um die Anwendung zu beden。
これは、「アプリの初期化に失敗した」ことを意味します。インターネット調査では、主に MS Officeのインストール問題。WinXPの修復を推奨します。
では、修復セットアップ(debug-dllの問題について話しているので助けにはならないと思います)のほかに、何かアイデアはありますか?
ああ、忘れる前に:まったく同じソースコードでビルドマシンにエラーは発生しません(つまり、DLLを登録でき、実行されます)。それは明らかにインストールの問題ですが、DLLがそこに あり、dependency-walkerがそれを見つけると、他に何を忘れましたか?
(編集)さて、私はまだ問題を解決していませんが、deemokのおかげでさらに一歩進んでいます。誤解を減らすために、以下に説明をいくつか示します。
- プログラムは開発者 -machineでの実行に失敗します
- 私はインストール済み VS2005(VC ++ 8プロジェクト)を使用しています
- BoostPro からboost-setupを使用し、可能なすべてのビルドバージョンをコンパイルし、それらがあることを再確認しました(そうでなければ、ビルド中に既にリンカーエラーが発生していました)。
- そして、私は考えることができるinclude / lib / bin構成の隅をダブルチェックしました-ブーストは特別な命名規則でWindowsで自動リンクを使用するので、ビルドまたは起動は失敗しますよりわかりやすいエラーメッセージ。 boost.threadはDLLプロジェクトの動的リンクを必要とするため、
- 私は静的リンクを使用できません(ここで混乱する可能性がありますが、この問題は私のマシン、私はこれをいじりたくありません、ブースト男は最初にそこにチェックインする理由があると確信しているので)
- 書いたように、Dependency Walkerで確認したところ、すべてが正常であると書かれています。
現在、boost-dllのエラー(マニフェストが正しくない可能性があります)のようです。それを確認します。
解決
では、BoostProのビルド済みライブラリを使用していますか?もしそうなら、あなたの環境は何らかの形でそれらが組み込まれている環境と少し違うかもしれません(TR1機能パックかどうかなど)。 を試してみることをお勧めします特定の環境で自分を強化する。
他のヒント
サイドバイサイド(SxS)の問題–単にDLLをコピーするだけでは不十分です。
デバッグビルドに関する特定の問題については、次を参照してください: vc2008の実行非開発マシンでのビルドのデバッグ
簡単な答え:
できないのは、デバッグランタイム用のインストーラーが存在しないためです(実際、ソフトウェアライセンスはそれを配布することを禁じているため、何かをまとめたとしてもEULAに違反することになります)。
したがって、そこにVisual Studioをインストールする必要があります。
ただし、そのパスを使用せずに試してみたい場合は、 puetzkの答え全体。
または、すべてを静的にリンクすることもできます。
これは、SxSとは関係がないことが判明する場合があります。イベントログでSxSエラーメッセージを確認し、依存関係ウォーカーを使用して最も可能性の高いDLL依存関係の問題を確認するか、DLLの1つが(何らかの理由で)DllMainからFALSEを返していることをお勧めします。
また、ローダースナップの有効化:
gflags -i yourapp.exe + sls
デバッガー(または、依存関係ウォーカー)の下で実行すると、余分な光を放つ場合があります。
注:gflagsは Windowsデバッグツールの一部です。
dependency walker を入手してください。その中でアプリケーションexeを開きます。アプリケーションに必要なすべてのdllが表示されますが、ロード/アクセスできません。
それでも十分でない場合は、依存関係ウォーカーを使用してアプリのプロファイルを作成することもできます。これにより、問題がどこにあるかを調べるための多くの出力が得られます。
[編集] デバッグビルドに問題があるだけなので: boostをアップグレードしたときに、リリースバイナリだけでなく、boostのデバッグバイナリも再構築したことを確認してください。そしてもちろん、デバッグビルドが現在使用しているのと同じバージョンのVisualStudioでビルドされていることを確認してください。
また、インクルードパス(tools-> options-> projectsおよびsolutions-> VC ++ディレクトリ)が正しいことを確認します。古いバージョンではなく、最新のBoostバージョンへのパスが存在する必要があります。