EDIT:RESOLVED。問題ははるかに良かった - 私はコードの1行でお互いに呼び出された2つの機能を持っていた - どちらもlexical_cast
と他がクラッシュしていた。私は、cout
がクラッシュ時にバックトレースがなく、ラインをデバッグするときにgdbが間違っていることを示していたので、これを見つけることができたのは面白いことです(と私はdidnもう一人見て、一息)。助けてくれてありがとう!共有ライブラリの例外をブーストする
私はgcc 4.1.2とboost 1.48を使用しています。 (それはが伝播して終了するプログラムを、このキャッチ句はdoesnのないキャストが失敗した
try {
boost::lexical_cast<T>(s);
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
が、例外はキャッチされません:私は、テンプレート関数内の共有ライブラリに次のコードを持っていますそれをキャッチしないでください)。 T
はlong
であり、s
はstd::string
であり、"234a234"
に等しい。 (また、ブーストをラップして、#pragma GCC visibility push(default)
に含まれていて、リンク時に-shared-libgcc
フラグを追加しようとしましたが、何もしませんでした)。
次の2つの場合には例外が捕まるん:
try {
throw boost::bad_lexical_cast();
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
と驚くほど、この1:
try {
boost::lexical_cast<T>(s);
throw boost::bad_lexical_cast();
}
catch (...) {
std::cout << "Caught it" << std::endl;
throw;
}
どれで何が起こっているかのアイデアやより重要なのは、この問題を解決するには?
をリスト上でこれを見つけましたか?それはあなたの質問に答えることはありませんが、多分それはコンパイラを助けるでしょう。 – Joel
それは助けにはならない:( – eddi