1

含める<boost/thread.hpp>と、この例外が発生します。

First-chance exception at 0x7c812afb in CSF.exe: Microsoft C++ exception: 
boost::exception_detail::clone_impl<boost::exception_detail::bad_alloc_> at memory location 0x0012fc3c..
First-chance exception at 0x7c812afb in CSF.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..

私はそれをキャッチできません、メモリの場所で壊すとkernel32.dllに移動し、この時点で何が起こっているのかわかりませんが、プログラムが終了した後に例外がスローされ、VSがそれをキャッチできるようです。

テストケース:

#include <boost/thread.hpp>

int main()
{
   return 0;
}

コンパイラのコマンドライン:
/I"I:\SophisPal\boost-1_43_0-vc10-32\include\boost-1_43" /Zi /nologo /W3 /WX- /O2 /Oi /Oy- /GL /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Release\Client.pch" /Fa"Release\" /Fo"Release\" /Fd"Release\vc100.pdb" /Gd /analyze- /errorReport:queue

リンカーコマンドライン:
/OUT:"C:\Documents and Settings\user\my documents\visual studio 2010\Projects\CSF\Release\Client.exe" /INCREMENTAL:NO /NOLOGO "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_system-vc100-mt-1_43.lib" "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_date_time-vc100-mt-1_43.lib" "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_regex-vc100-mt-1_43.lib" "I:\SophisPal\boost-1_43_0-vc10-32\lib\libboost_thread-vc100-mt-1_43.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Release\Client.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Documents and Settings\user\my documents\visual studio 2010\Projects\CSF\Release\Client.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /PGD:"C:\Documents and Settings\user\my documents\visual studio 2010\Projects\CSF\Release\Client.pgd" /LTCG /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE

4

7 に答える 7

2

これは、Boost静的ライブラリとヘッダーファイルの不一致のように聞こえます。Boostをどのようにインストールしましたか?マシン上でbootstrap.batを実行してビルドしましたか?コンパイル後にブーストヘッダーファイルを変更しましたか?VS 2008グローバル設定に、異なるバージョンのBoostライブラリを含むディレクトリへのライブラリディレクトリ参照がありますか?

言い換えると、bootstrap.batでコンパイルされたライブラリを使用してboostのクリーンインストールを試し、マシン上の他のすべてのBoost実装を削除しましたか?それが完了するまでは、堅実ではない基盤に取り組んでいます。

それでも問題が解決しない場合は、[デバッグ]-> [例外]に移動し、デバッガーで呼び出しスタックを確認できるように、最初のチャンスのC ++およびWin32例外の中断をオンにしてみましたか?それでも問題が解決しない場合は、Win32 APIを使用して、プロセスのミニダンプ(* .dmp)をファイルに書き出すためのAPISetUnhandledExceptionFilter()を使用するコールバックを渡して、事後デバッグを実行してみましたか。 VS 2010デバッガーを使用していますか?MiniDumpWriteDump()DBGHELP.DLL

于 2010-06-04T17:44:55.073 に答える
2

g++のバージョン4.6.1で同様の問題が発生しました-ブーストバージョン1.47.0

エラーは非常にあいまいで、コードの特定のセクションを指していません。多くの努力の結果、ディレクティブの追加にたどり着きましたがpragma pack(1)、STLテンプレートを宣言したりライブラリデータメンバーテンプレートをブーストしたりする前に閉じられませんでした。

修正は、すべてを削除し、必要な構造にpragma pack(x)GNUスタイルのパッキングを使用することでした"__attribute__((packed))"

Boostは、ライブラリとリンクしているときにエラー/警告を示すのに適しているはずです。

于 2012-11-08T23:59:46.717 に答える
1

新しい空のWin32コンソールアプリケーションを作成することをお勧めします(小さなプロジェクトのプリコンパイル済みヘッダーなどを取得しないように、通常は[空のプロジェクト]チェックボックスをオンにします)。

プロジェクトに.cppファイルを追加し、コンテンツを提供します。

プロジェクトのプロパティの[C/C ++]->[一般]の[追加のインクルードディレクトリ]ボックスで、最上位のBoostフォルダー(すべてのヘッダーファイルを含むboostという名前のフォルダーを含むフォルダー)へのパスを追加します。私の場合、それはz:\ dev\boost_1_43_0です。あなたの投稿に基づくと、あなたはおそらくI:\ SophisPal \ boost-1_43_0-vc10-32 \ include\boost-1_43です。

また、プロジェクトのプロパティの[リンカー]-> [一般]の[追加のライブラリディレクトリ]ボックスで、コンパイルされたBoostライブラリを含むフォルダーへのパスを追加します。私のPCでは、これはz:\ dev \ boost_1_43_0\libです。あなたの投稿に基づくと、あなたはおそらくI:\ SophisPal \ boost-1_43_0-vc10-32\libです。

リンクするライブラリをリンカに明示的に指示する必要はありません。Boostヘッダーは、Visual C ++#pragmaディレクティブの1つを使用して、使用する必要のあるライブラリをリンカーに通知します。

これで、デバッグ構成とリリース構成の両方をビルドして実行できるようになります。私はこれらの手順を正確に実行しましたが、問題はありませんでした。

それが機能する場合は、現在のプロジェクトの構成と一致するまで、一度に1つのオプションでプロジェクトの変更を開始します。最終的には何かが機能を停止し、問題が何であるかがわかります。

それでも問題が解決しない場合は、Boostソースをダウンロードして再構築することを検討します。

于 2010-05-30T00:56:50.293 に答える
1

いくつかの考え:

main()のにクラッシュが発生していることをどのように知っていますか?

デバッガーから実行し、(未処理だけでなく)すべての例外をキャッチするようにVSを構成するとどうなりますか?

クラッシュのスタックトレースを投稿できますか?

于 2010-06-01T18:28:04.607 に答える
1

VLD (Windows)やValgrind(Linux)などのメモリプロファイラーを使用して、割り当てが正しくないことを示しているかどうかを確認する必要があります。現在のコンパイラとの非互換性のバグを含むバージョンのBoostライブラリがある場合は、修正を適用します。

于 2010-06-03T08:21:43.620 に答える
1

これはブースト1.43の仕様によるものですが、その後修正されました。詳細については、このスレッドを参照してください。

于 2010-08-31T19:44:51.497 に答える
1

新しい基本プロジェクトを作成し、ブーストを再コンパイルすることをお勧めするヘッダーを含めるだけで、ビルドが不良であるか、プロジェクト設定が台無しになっています。boost.orgからリンクされているsourceforgeから最新バージョン1.45をダウンロードできます。あなたがそこにいる間に最新のbjamをつかみなさい。Visual Studioコマンドプロンプトから次のコマンドを実行して、64ビットおよび32ビットでブーストを構築できます。

bjam --build-type=complete --toolset=msvc-10.0 --stagedir=lib64 address-model=64 stage > x64-buildboost.log
RD bin.v2 /S /Q
bjam --build-type=complete --toolset=msvc-10.0 --stagedir=lib32 stage > x86-buildboost.log
RD bin.v2 /S /Q

ちなみに、CSFリファレンスがIntelのCommunications Services Frameworkオープンソーステレフォニープロジェクトを参照している場合、私は以前にそれに取り組んでおり、そのプロジェクトでブーストをアップグレードすると、修正されたよりも多くのことが壊れました...公正​​な警告。

于 2010-12-23T23:33:47.617 に答える